我有一个客户端,我们的应用程序的.msi安装程序有问题.WiX用于创建此安装程序.该应用程序已安装在许多其他机器上,但在他的机器上显示消息:
无法打开此安装包.请与应用程序供应商联系,以验证这是否是有效的Windows Installer程序包.
我的猜测是,这是以下两种可能性之一:
客户端计算机上的Windows Installer版本已过期.
他的.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/l*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 Installer程序包.
所以它似乎是一个权限问题,但我不确定为什么以及如何解决它.我是否可能需要对.msi文件进行数字签名?
背景:
当MSI安装程序文件未完全下载或被我的防病毒程序损坏或被我的FTP客户端损坏时,我注意到完全相同的消息.
该错误消息实际上来自msiexec.exe,它是Windows Installer系统的可执行程序,它实际上解释了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
我遇到了这个问题("MainEngineThread返回2").这个线程对于缩小问题范围很有用,但我还没有完全解决它.
在我们的例子中,我们怀疑问题与BitLocker和/或用相对路径调用msiexec有关(例如"msiexec/i ..\foo.msi").直接运行"..\foo.msi",在正确的文件夹中运行"msiexec/i foo.msi"也可以.
也许这些线索会帮助别人.在我们的例子中,我们将更改目录结构以避免"..".
如果msiexec检测到MSI文件已损坏,则会抛出此错误消息.它可以做到这一点,因为所有MSI文件都有校验和,有些甚至是数字签名.
不幸的是,MSI文件的这种损坏发生了很多.不仅仅是因为下载时网络连接不稳定,而且最常见的是病毒扫描程序会干扰下载本身 - 如果他们试图'清理'数据流,你最终会导致损坏的MSI.
解决此问题的唯一方法是重新下载MSI文件,并可能禁用该下载的病毒扫描程序/防火墙.在尝试安装MSI文件之前,可以在将MSI文件保存到磁盘后检查病毒.