11

我有一个客户,我们的应用程序的 .msi 安装程序有问题。WiX 用于创建此安装程序。该应用程序在其他几十台机器上安装得很好,但在他的机器上它显示消息:

无法打开此安装包。请与应用程序供应商联系以验证这是否是有效的 Windows 安装程序包。

我的猜测是它是以下两种可能性之一:

  1. 客户端计算机上的 Windows Installer 版本已过期。
  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 /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 文件进行数字签名吗?

4

8 回答 8

13

背景:

当 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
于 2009-02-11T18:57:48.320 回答
8

我也遇到了这个问题(“MainEngineThread 正在返回 2”)。该线程有助于缩小问题的范围,但我还没有完全解决它。

在我们的案例中,我们怀疑问题与 BitLocker 和/或使用相对路径(例如“msiexec /i ..\foo.msi”)调用 msiexec 有关。直接运行“..\foo.msi”,在正确的文件夹中运行“msiexec /i foo.msi”也可以。

也许这些线索会对其他人有所帮助。在我们的例子中,我们将更改目录结构以避免“..”。

于 2010-03-12T00:01:57.723 回答
5

如果 msiexec 检测到 MSI 文件已损坏,则会引发此错误消息。它可以做到这一点,因为所有 MSI 文件都有一个校验和,有些甚至是数字签名的。

不幸的是,MSI 文件的这种损坏经常发生。不仅仅是因为下载时网络连接不稳定,而且通常是因为病毒扫描程序会干扰下载本身——如果他们试图“清理”数据流,你最终会得到一个损坏的 MSI。

解决此问题的唯一方法是重新下载 MSI 文件,并可能禁用该下载的病毒扫描程序/防火墙。您可以在将 MSI 文件保存到磁盘后检查病毒,然后再尝试安装它。

于 2009-02-11T20:36:27.907 回答
4

您可以尝试在命令行中启动 MSI 并获取日志文件。

像这样: MSI: msiexec /i (Filename.MSI) /l*v (filename.TXT)

于 2009-02-11T19:13:12.743 回答
3

当我使用它时它工作absolute path ms file

例子:

msiexec.exe /i .\a.msi

msiexec.exe /i c:\a.msi

于 2019-05-17T09:17:56.570 回答
1

在此处输入图像描述

解决方法:1)以管理员身份运行cmd,2)F:\SOFTWARES>msiexec /i node-v4.5.0-x64.msi

于 2016-09-17T18:41:35.040 回答
1

If anyone is developing a new installer and comes across this same error, check your Bootstrapper project output type. I added a new Bootstrapper project, and copied in a bunch of known-good code. The project output type defaults to MSI, and when attempting to test it I got an identical "MainEngineThread is returning 2" and the same preceding line.

Set the output type to its appropriate EXE and it's working great.

于 2015-09-17T19:46:15.610 回答
0

我发现问题了!

我们的场景类似:

  • 我们下载了 msi(我们尝试了几次:试用版、最新的 2019、beta 2019 和 beta 2020)
  • 我们以交互方式启动了 MSI,一切顺利
  • 当我们尝试使用安静模式(有据可查)时,结果总是一样的,它在几行后完成,没有有用的文档。

我们发现这是由于 MSIEXEC 访问 MSI 文件的方式,并且 ISSUE 与在下载文件上执行的新 Windows 阻止系统有关(该死!)

运行powershell命令“Unblock-File”就足够了,然后一切都开始正常工作了!

我希望这很有用,我会一直写信给 safe.com 团队,将此免责声明添加到他们的文档中。

于 2019-09-25T12:46:18.423 回答