我正在使用wix编写安装程序。我也写过自定义动作。但是在安装MSI时安装失败,因为目标系统没有MSVCR100D.dll
我使用/MTd
选项进行链接,这是我读过的用于静态链接的文档。
任何人都可以让我知道如何静态链接msvcr100d.dll
,以便即使目标系统上没有msvcr100d.dll
,我的MSI安装也会成功吗?
答案 0 :(得分:5)
MSVCR100D.dll中的“D”表示您的本机自定义操作DLL是调试DLL。除非安装了各种SDK,否则“D”依赖关系不会出现在目标计算机上。在发行版中重建您的DLL,依赖项将更改为MSVCR100.dll
此外,由于您使用的是WiX / Votive,因此有一个Visual Studio WiX C ++ CA项目类型可以为您创建项目。我的经验是,当您使用该项目类型时,所有默认的编译器和链接器设置都是开箱即用的。
答案 1 :(得分:0)
我注意到了同样的问题。就我而言,我正在尝试调试在安装程序上下文中运行的自定义操作,因此我确实想要安装调试版本。
根据Microsoft策略,Visual Studio调试CRT DLL不可再发行。显然,似乎使用/ MTd(静态链接,调试配置)使用Visual Studio 2010编译的64位DLL会产生依赖于MSVCR100D.dll的输出。在64位版本配置中,正如预期的那样,使用/ MT进行编译不会导致对MSVCR100.dll的依赖。
一种解决方案是在目标测试计算机上安装Visual Studio。 Microsoft提供了进一步的建议here.