【问题标题】:wix custom action missing dll MSVCR100D.dllwix 自定义操作缺少 dll MSVCR100D.dll
【发布时间】:2012-03-06 12:31:47
【问题描述】:
我正在使用 wix 编写安装程序。我还编写了自定义操作。但是在安装 MSI 时安装失败,因为目标系统没有MSVCR100D.dll
我正在使用 /MTd 选项进行链接,这是我阅读的文档建议的静态链接。
谁能告诉我如何静态链接msvcr100d.dll,这样即使目标系统上不存在msvcr100d.dll,我的MSI安装也会成功?
【问题讨论】:
标签:
visual-c++
wix
windows-installer
【解决方案1】:
MSVCR100D.dll 中的“D”表示您的本机自定义操作 DLL 是调试 DLL。除非目标机器安装了各种 SDK,否则“D”依赖项不会出现在目标机器上。在发行版中重建你的 DLL,依赖项将更改为 MSVCR100.dll
此外,由于您使用的是 WiX / Votive,因此有一个 Visual Studio WiX C++ CA 项目类型可以为您创建项目。我的经验是,当您使用该项目类型时,所有默认编译器和链接器设置都可以开箱即用。
【解决方案2】:
我注意到了同样的问题。就我而言,我正在尝试调试在安装程序上下文中运行的自定义操作,因此我确实想安装调试版本。
根据 Microsoft 政策,Visual Studio 调试 CRT DLL 不可再分发。显然,使用 Visual Studio 2010 编译的 64 位 DLL 似乎使用 /MTd(静态链接,调试配置)产生依赖于 MSVCR100D.dll 的输出。在 64 位版本配置中,正如预期的那样,使用 /MT 编译不会依赖于 MSVCR100.dll。
一种解决方案是在目标测试机器上安装 Visual Studio。微软提供更多建议here.