2012-04-01 57 views
0

我正在構建一個.msi,它是指用C++編寫的自定義動作DLL。我可以在Visual Studio 2010中構建自定義動作DLL,一切正常 - 引用wcautil.h,dutil.h等。當我將.msi添加到DLL時,但是(它正確地獲取二進制表和鍵等顯得合理),它就會死在自定義DLL中第一次引用ExitOnFailure。我猜這意味着wcautil.lib不會與DLL/.msi一起出現,但我不知道爲什麼會這樣 - DLL包含wcautil_2010.lib(以及dutil_2010.lib和msi .lib)在附加的庫依賴關係列表中(它們來自模板VS項目)wix MSI自定義動作DLL死於wcautil函數

任何人都知道如何判斷wcaUtil和dutil是否實際存在.msi?或者我需要做些什麼來確保它們在WiX上的Wca功能執行?

+0

我想DLL必須靜態鏈接。 MSI提取DLL並運行它,它不會自動提取您依賴的DLL。它可能是未初始化的變量/指針嗎? – 2012-04-02 06:32:41

+0

如何靜態鏈接DLL?我前幾天看了一遍,有人說這是不可能的。我確實看到VS.vcxproj文件包含對'additional linkage dependencies'區域中必要庫的引用,並且libs存在於$(WIX)sdk \ lib下。 – 2012-04-02 16:59:23

+0

@DaveCombs它聽起來像你的項目已經設置爲wcautil和dutil(Wix CA項目設置了這個)的靜態鏈接。如果您正在運行第一次調用'ExitOnFailure'的代碼,那麼您的鏈接就OK了。你遇到了什麼錯誤?你怎麼確定你會遇到'ExitOnFailure'?你有沒有試過附加一個調試器? – heavyd 2012-04-02 19:20:11

回答

0

終於搞清楚發生了什麼事。在ExitOnFailure之前的WcaInitialize實際上是返回一個錯誤的錯誤代碼(由於某種原因我認爲日誌不可用,因爲DLL在MSI的UI階段運行,並且錯誤地認爲所有的messagebox- )錯誤代碼表明DLL項目沒有包含版本資源,這看起來像一個錯誤,因爲它是直接從Visual Studio中的模板Wix自定義動作DLL模板創建的。)一旦修復,事情還在繼續。感謝所有有用的評論!