【问题标题】:MSI Install Failed - Error 1723MSI 安装失败 - 错误 1723
【发布时间】:2016-02-03 10:49:59
【问题描述】:

在安装 VS2015 中内置的 .msi 时,我无法在某些机器上安装我们的软件。

没有 VS2015,我在日志文件中得到了这个:

MSI (s) (24:64) [11:21:22:095]:执行操作:InstallFinalize
行动 11:21:22:InstallFinalize。
动作开始时间 11:21:22:InstallFinalize。
MSI (s) (24:64) [11:21:22:095]:用户策略值“DisableRollback”为 0
MSI (s) (24:64) [11:21:22:095]:机器策略值“DisableRollback”为 0
行动 11:21:22:回滚清理。删除备份文件
MSI (s) (24:64) [11:21:22:585]:为线程 8036 创建类型为 790536 的 MSIHANDLE (13)
MSI (s) (24:74) [11:21:22:595]:调用远程自定义操作。 DLL:C:\Windows\Installer\MSIAE3F.tmp,入口点:_KSTInstallSC@4
MSI (s) (24:74) [11:21:22:595]:生成随机 cookie。
MSI (s) (24:74) [11:21:22:645]:使用 PID 1160 (0x488) 创建了自定义操作服务器。
MSI (s) (24:5C) [11:21:22:765]:作为服务运行。
MSI (s) (24:5C) [11:21:22:775]:您好,我是您的 32 位高架非重新映射自定义操作服务器。
CustomAction _3F7B94EF_231A_421E_BF8B_C0760F3B266E 返回实际错误代码 1157(请注意,如果翻译发生在沙箱内,这可能不是 100% 准确) MSI (s) (24:74) [11:21:22:975]:为线程 8036 关闭 790536 类型的 MSIHANDLE (13)
MSI (s) (24:64) [11:21:22:975]:注意:1:1723 2:_3F7B94EF_231A_421E_BF8B_C0760F3B266E 3:_KSTInstallSC@4 4:C:\Windows\Installer\MSIAE3F.tmp
MSI (s) (24:64) [11:21:22:975]:注意:1:2262 2:错误 3:-2147287038
MSI (c) (8C:0C) [11:21:22:975]:注意:1:2262 2:错误 3:-2147287038
调试:错误 2835:在对话框 ErrorDialog 上找不到控件 ErrorIcon 安装程序在安装此软件包时遇到意外错误。这可能表明此软件包有问题。错误代码为 2835。参数为:ErrorIcon、ErrorDialog、
错误 1723。此 Windows 安装程序包有问题。无法运行完成此安装所需的 DLL。请联系您的支持人员或软件包供应商。操作 _3F7B94EF_231A_421E_BF8B_C0760F3B266E,条目:_KSTInstallSC@4,库:C:\Windows\Installer\MSIAE3F.tmp
MSI (s) (24:64) [11:21:25:796]:注意:1:2262 2:错误 3:-2147287038
MSI (s) (24:64) [11:21:25:796]:产品:KST -- 错误 1723。此 Windows 安装程序包有问题。无法运行完成此安装所需的 DLL。请联系您的支持人员或软件包供应商。操作 _3F7B94EF_231A_421E_BF8B_C0760F3B266E,条目:_KSTInstallSC@4,库:C:\Windows\Installer\MSIAE3F.tmp

我查看了 Visual Studio 并没有与日志文件中的任何内容匹配的自定义操作。

需要注意的是,在测试 PC 上安装 VS2015 后,安装工作正常,因此肯定缺少 DLL 或其他东西。但是在我们所有客户的机器上安装 VS2015 是不切实际的。

有什么方法可以将所需的文件与 msi 一起打包?如果是这样,我怎样才能找到依赖的 DLL 文件的名称?

【问题讨论】:

标签: windows dll mfc windows-installer


【解决方案1】:

根据您构建此软件包的方式,可能有更好的方法可以在项目中进行跟踪。但是,让我们假设我们收到了这个包裹,并且想要让它工作,尽管它有问题。

您知道入口点是_KSTInstallSC@4,它使您可以使用您最喜欢的 MSI 编辑程序在内置的 MSI 中的CustomAction table 的目标列中寻找一些东西。该表中的记录应以其源列引用二进制表中包含 DLL 的行。提取该 DLL 后,您可以使用任何显示依赖项的工具,例如 Dependency Walker、CFF Explorer 甚至 dumpbin /imports

至于如何修复,单机安装依赖即可。但是要在包中修复它,您可能必须更改 DLL 的构建方式。例如,您可以让它静态导入 C++ 运行时,这样它就没有异常的外部运行时依赖项。

【讨论】:

    【解决方案2】:

    您已经做了一些与 KST 产品相关的事情,它是一个 C++ 应用程序,显然您正在作为自定义操作运行,无论是有意还是通过包含一个合并模块。错误 1157 表示加载失败,因此它必须依赖于至少一个未安装的其他 Dll。

    【讨论】:

      【解决方案3】:

      根据附加到自定义操作名称的 GUID (3F7B94EF_231A_421E_BF8B_C0760F3B266E) 判断,我会说您的包/项目中包含一个合并模块,它运行此自定义操作,正如 Phil 提到的那样。

      【讨论】:

        【解决方案4】:

        我最近遇到了同样的问题,在我的情况下,Windows Defender 对 MSI 日志中提到的 tmp 文件误报为它无法找到的 DLL。 Defender 将其识别为病毒,并在 MSI 包可以使用它之前删除了该文件。

        因此,请尝试禁用 Defender/任何其他防病毒软件,然后重试。

        【讨论】:

          猜你喜欢
          • 2012-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-22
          • 2011-03-25
          相关资源
          最近更新 更多