在安装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文件的名称?
答案 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/任何其他防病毒软件,然后重试。