2012-03-06 120 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.