2009-02-11 173 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