2009-02-11 178 views
8

我的客戶端在我們的應用程序的.msi安裝程序中遇到問題。 WiX被用來創建這個安裝程序。該應用程序在幾十臺其他機器上安裝得很好,但在他的機器上顯示消息:Windows安裝程序包的問題

此安裝包不能打開 。請聯繫應用程序供應商 以驗證這是一個有效的Windows 安裝程序包。

我的猜測是,它是這兩種可能性之一:

  1. Windows安裝程序的客戶機上的版本是過時的。
  2. 他可能已損壞.msi。

什麼是最可能的可能性,還是有其他可能性,我不知道?

我想我已經重新創建了用戶的問題。如果,從命令shell,我跑MyFile.msi,那麼它成功加載,然後我得到這個日誌文件:

=== Verbose logging started: 2/12/2009 10:34:38 Build type: SHIP UNICODE 4.00.6001.00 Calling process: C:\Windows\System32\msiexec.exe === 
MSI (c) (F4:04) [10:34:38:795]: Resetting cached policy values 
MSI (c) (F4:04) [10:34:38:795]: Machine policy value 'Debug' is 0 
MSI (c) (F4:04) [10:34:38:795]: ******* RunEngine: 
      ******* Product: C:\Users\kelley\Downloads\PixelActiveCityScape_v1_6_Demo.msi 
      ******* Action: 
      ******* CommandLine: ********** 
MSI (c) (F4:04) [10:34:38:802]: Machine policy value 'DisableUserInstalls' is 0 
MSI (c) (F4:04) [10:34:38:830]: Note: 1: 1402 2: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 3: 2 
MSI (c) (F4:04) [10:34:39:140]: SOFTWARE RESTRICTION POLICY: Verifying package --> 'C:\Users\kelley\Downloads\PixelActiveCityScape_v1_6_Demo.msi' against software restriction policy 
MSI (c) (F4:04) [10:34:39:141]: Note: 1: 2262 2: DigitalSignature 3: -2147287038 
MSI (c) (F4:04) [10:34:39:141]: SOFTWARE RESTRICTION POLICY: C:\Users\kelley\Downloads\PixelActiveCityScape_v1_6_Demo.msi is not digitally signed 
MSI (c) (F4:04) [10:34:39:142]: SOFTWARE RESTRICTION POLICY: C:\Users\kelley\Downloads\PixelActiveCityScape_v1_6_Demo.msi is permitted to run at the 'unrestricted' authorization level. 
MSI (c) (F4:04) [10:34:39:189]: Cloaking enabled. 
MSI (c) (F4:04) [10:34:39:190]: Attempting to enable all disabled privileges before calling Install on Server 
MSI (c) (F4:04) [10:34:39:197]: End dialog not enabled 
MSI (c) (F4:04) [10:34:39:197]: Original package ==> C:\Users\kelley\Downloads\PixelActiveCityScape_v1_6_Demo.msi 
MSI (c) (F4:04) [10:34:39:197]: Package we're running from ==> C:\Users\kelley\AppData\Local\Temp\40a3581.msi 
. 
. 
. 

但是,如果我跑MSIEXEC/I MyFile.msi /升* v MyLog.TXT,我得到這個:

=== Verbose logging started: 2/12/2009 10:32:19 Build type: SHIP UNICODE 4.00.6001.00 Calling process: C:\Windows\sy 
stem32\msiexec.exe === 
MSI (c) (FC:F0) [10:32:19:597]: Resetting cached policy values 
MSI (c) (FC:F0) [10:32:19:597]: Machine policy value 'Debug' is 0 
MSI (c) (FC:F0) [10:32:19:597]: ******* RunEngine: 
      ******* Product: .\PixelActiveCityScape_v1_6_Demo.msi 
      ******* Action: 
      ******* CommandLine: ********** 
MSI (c) (FC:F0) [10:32:19:599]: Note: 1: 2203 2: .\PixelActiveCityScape_v1_6_Demo.msi 3: -2147287038 
MSI (c) (FC:F0) [10:32:19:600]: MainEngineThread is returning 2 
=== Verbose logging stopped: 2/12/2009 10:32:19 === 

,這表明此對話框:

此安裝包不能 開了。驗證包 是否存在並且您可以訪問它,或者 與應用程序供應商聯繫以確認這是一個有效的Windows 安裝程序包。

所以它看起來像一個權限問題,但我不完全確定爲什麼以及如何修復它。我是否可能需要對.msi文件進行數字簽名?

回答

12

背景:

我已經注意到了完全相同的消息時,MSI安裝程序文件並沒有完全下載,或者是我的防病毒程序損壞,或者是我的FTP客戶端錯位。

錯誤信息實際上來自msiexec.exe,它是Windows安裝程序系統的可執行程序,它實際解釋MSI安裝程序文件並將軟件安裝到客戶機的目標上。


要檢查MSI文件的完整性:

計算的已知良好的使用類似md5.exe您的MSI安裝程序文件的副本MD5SUM。讓客戶端爲他的副本做同樣的事情,然後比較哈希值。如果結果不同,則MSI安裝程序文件的客戶端副本肯定會損壞。


例如

在您結束:

 
C:\Documents and Settings\yourbox\Desktop>md5.exe AcroRead.msi 
C587C739666E26B2A9B1F5BBAF358808 AcroRead.msi 

在客戶端:

 
C:\Documents and Settings\theclient\Desktop>md5.exe AcroRead.msi 
90AFFBD9A1954EC9FF029B7AD7183A16 AcroRead.msi 
+0

好有關MD5校驗想法。 – 2009-02-11 19:05:13

+1

前段時間我遇到這個問題時,我創建了一個GUI實用程序來檢查散列。你可以在這裏找到它,如果你有興趣:http://www.binaryfortress.com/hashtools/ – 2009-02-11 19:06:54

+0

這是一個很好的工具,喬恩T.謝謝! – eleven81 2009-02-11 19:19:09

4

你可以嘗試啓動MSI命令行並獲得一個日誌文件。

像這樣: MSI:MSIEXEC/I(Filename.MSI)/ L * V(FILENAME.TXT)

5

此錯誤消息是由MSIEXEC如果它檢測到MSI文件損壞拋出。它可以這樣做,因爲所有的MSI文件都有校驗和,有些甚至是數字簽名的。

MSI文件的這種腐敗不幸發生了很多。這不僅僅是因爲下載時有片狀網絡連接,而且大多數情況下是由病毒掃描程序干擾下載本身 - 如果他們試圖「清理」數據流,最終會出現損壞的MSI。

解決此問題的唯一方法是重新下載MSI文件,並可能禁用該下載的病毒掃描程序/防火牆。在嘗試安裝MSI文件之前,您可以在MSI文件保存在磁盤上後檢查病毒。

7

我碰到這個問題(「MainEngineThread is returned 2」)。此線程有助於縮小問題的範圍,但我沒有完全解決它。

在我們的案例中,我們懷疑問題與BitLocker和/或相對路徑調用msiexec(如「msiexec/i .. \ foo.msi」)有關。 運行「.. \ foo.msi」直接運行,在適當的文件夾中運行「msiexec/i foo.msi」也可以。

也許這些線索會幫助別人。在我們的例子中,我們將改變目錄結構以避免「..」。

1

如果有人正在開發新的安裝程序並遇到同樣的錯誤,請檢查您的Bootstrapper項目輸出類型。我添加了一個新的Bootstrapper項目,並複製了一堆已知好的代碼。項目輸出類型默認爲MSI,當試圖測試它時,我得到了一個完全相同的「MainEngineThread正在返回2」和前一行。

將輸出類型設置爲適當的EXE,它的工作效果很好。

0

enter image description here

解決方案: 1)運行CMD作爲管理員, 2)F:\軟件> MSIEXEC /節點i-V4.5.0-x64.msi