MSI安装失败 - 错误1723

时间:2016-02-03 10:50:00

标签: windows dll mfc windows-installer

在安装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:RollbackCleanup。删除备份文件
  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
  DEBUG:错误2835:在对话框ErrorDialog上找不到控件ErrorIcon   安装程序在安装此程序包时遇到意外错误。这可能表明此包装存在问题。错误代码是2835.参数是:ErrorIcon,ErrorDialog,
  错误1723.此Windows Installer程序包存在问题。无法运行此安装所需的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 Installer程序包存在问题。无法运行此安装所需的DLL。请联系您的支持人员或包装供应商。操作_3F7B94EF_231A_421E_BF8B_C0760F3B266E,条目:_KSTInstallSC @ 4,库:C:\ Windows \ Installer \ MSIAE3F.tmp

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

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

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

4 个答案:

答案 0 :(得分:1)

根据您构建此程序包的方式,可能有更好的方法在项目中跟踪此情况。但是,让我们假装我们收到了这个软件包,并希望尽管它有问题仍然可以使用它。

您知道入口点是_KSTInstallSC@4,它可以使用您最喜欢的MSI编辑程序在构建的MSI中的CustomAction table的目标列中查找。该表中的记录应将其Source列引用到包含DLL的Binary表中的行。提取该DLL后,您可以使用任何显示依赖关系的工具,例如Dependency Walker,CFF Explorer,甚至dumpbin /imports

至于如何修复它,在一台机器上只需安装依赖项。但要在包中修复它,您可能必须更改DLL的构建方式。例如,您可以使其静态导入C ++运行时,因此它没有异常的外部运行时依赖性。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

根据附加的GUID( 3F7B94EF_231A_421E_BF8B_C0760F3B266E )来判断自定义操作名称,我会说你的包/项目中包含了一个合并模块,它运行这个自定义操作,就像Phil提到的那样。 / p>

答案 3 :(得分:0)

我最近遇到了同样的问题,就我而言,是 Windows Defender 对 MSI 日志中提到的 tmp 文件有误报,作为它找不到的 DLL。 Defender 将其识别为病毒并在 MSI 软件包可以使用它之前删除了该文件。

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