我的项目使用Wix 7.x.我们有一个自定义动作DLL(用C ++编写),它使用SHA2进行数字认证。此DLL先前已通过SHA1认证。
除了数字证书更改之外,没有任何其他更改。
安装时我们会收到以下错误消息。
CustomAction customaction_a返回实际的错误代码1157(请注意这一点 如果翻译发生在沙箱内,可能不是100%准确)
错误1723.此Windows Installer程序包存在问题。一个 无法运行此安装完成所需的DLL。联系 您的支持人员或包装供应商。行动惯例_a, entry:FirstCustomAction,library:C:\ Windows \ Installer \ MSICD2E.tmp
当DLL通过SHA1认证时,它在Windows 7,Windows 8和Windows 8.1中成功安装,没有任何错误。 当DLL通过SHA2认证时,它在Windows 7,Windows 8中出现上述错误。但在Windows 8.1和Windows 10中成功安装。
我已经搜索了互联网并尝试了建议的选项,例如为%temp%文件夹提供权限,为msiexec注册了错误的路径等等......没有任何帮助。
这是一个已知的问题/错误吗?任何解决方案/解决方案都将是一个很大的帮助。
答案 0 :(得分:1)
从Windows Installer的角度来看,这里没有任何与签名有关的内容。 1157错误是“无法找到运行此应用程序所需的库文件之一。”。换句话说,这是一个缺失的依赖。如果它不依赖于你的其他Dll那么它可能是CRT / MFC / ATL等的缺失版本,或者是通用CRT,其中大多数具有各种可再发行组件,这些可再发行组件可能已经或可能没有作为先决条件安装在某些系统上其他产品
你可能正在安装先决条件,你的帖子没有说。您可能在MSI中包含了某些版本的C ++合并模块,但是在自定义操作运行之后才会提交某些SxS版本并导致此失败。因此,鉴于1157错误,除非有一个与签名相关的可选Dll不在所有版本的Windows上,并且这似乎不太可能,因此有很多原因可能导致失败与签名无关。最简单的解释是由错误指示的 - 缺少依赖性。
如果您只是将Dll复制到无法加载并在那里运行依赖性walker的系统,那么Dll上的Dependency Walker可能会告诉您丢失的Dll是什么。