2012-03-06 127 views
1

我正在写一个使用wix的安装程序。我还编写了自定义操作。但在安装MSI时,安装失败,因为目标系统没有MSVCR100D.dllwix自定义操作缺少DLL MSVCR100D.dll

我使用/MTd选项进行链接,这是我阅读的文档建议用于静态链接的选项。

任何人都可以请让我知道如何静态链接msvcr100d.dll,以便即使目标系统上不存在msvcr100d.dll,我的MSI安装是否成功?

回答

5

MSVCR100D.dll中的“D”表示您的本机自定义动作DLL是调试DLL。除非他们安装了各种SDK,否则“D”依赖项不会在目标机器上。在版本中重建您的DLL,并且依赖项将更改为MSVCR100.dll

另外,由于您使用的是WiX/Votive,因此您可以使用Visual Studio WiX C++ CA项目类型为您创建项目。我的经验是,当您使用该项目类型时,所有默认的编译器和链接器设置都很适合开箱即用。

0

我注意到了同样的问题。在我的情况下,我试图调试在安装程序上下文中运行的自定义操作,所以我确实想安装调试版本。

由Microsoft策略,Visual Studio调试CRT DLL不可再发行。显然,似乎还有一点,使用/ MTd(静态链接,调试配置)使用Visual Studio 2010编译的64位DLL生成的输出依赖于MSVCR100D.dll。如预期的那样,在64位版本配置中,使用/ MT编译结果不依赖于MSVCR100.dll。

一种解决方案是在目标测试机器上安装Visual Studio。微软提供进一步的建议here.