2012-07-26 97 views
0

我現在正在使用wix並開發了一個安裝程序。此安裝程序調用C++自定義操作DLL。 DLL和安裝程序都正在構建,但是當我去安裝它時,安裝程​​序以「安裝程序嚮導由於錯誤提早結束」而結束「任何人都知道可能的答案?從C++自定義動作DLL調用函數的問題WIX

這是C++ DLL函數:

extern "C" UINT __stdcall StopOrcService(MSIHANDLE hInstall) 

然後我繼續在其下與用於功能的代碼。然後我使用def文件導出它。

<CustomAction Id='StopOrcService' BinaryKey='StopOrcService' DllEntry='StopOrcService' Execute='immediate' Return='check'/> 

<InstallExecuteSequence> 
    <Custom Action='StopOrcService' After='ProcessComponents' /> 
</InstallExecuteSequence> 

<Binary Id='StopOrcService' SourceFile='SetupDLL.dll' /> 

這是我的wix代碼。

回答

-1

我已經意識到,我忘了添加下面這行代碼,使我的代碼完美工作。希望這可以幫助其他人。:)

#pragma comment(linker, "/EXPORT:[email protected]") 
1

有幾十個可能的答案,很難說沒有看到你的C++和你的WiX代碼。

需要考慮的事情:

曾是C++的dll故意建成一個自定義操作? (它是否導出Type1 stdcall MsiCustom操作?) 該函數的名稱是什麼? 您的WiX代碼中的功能名稱是否正確? 你把你的函數中的任何日誌記錄,看看它是否被執行?

更新:您不應該使用自定義操作來執行安裝程序本身可以執行的操作。另外,在創建需要提升和/或更改機器狀態的CA時,應始終將其安排爲延期,而不能立即模擬。你需要閱讀大量的安裝程序最佳實踐來解決你的戰略問題,而不是分散你的戰術問題。

+0

首先我想知道的是爲什麼要自定義操作來停止服務。你的出口報表可能會搞砸。看看Depends中的DLL,看看你是否看到了導出的函數。 – 2012-07-26 16:08:22

+0

另一件事是您的CA被安排執行。在需要提升的機器上(例如啓用UAC),這經常會失敗,因爲執行安裝程序的人可能無權執行所需的操作。 – 2012-07-26 16:09:36

+0

是的,它必須是,因爲我需要找到註冊表值,以我的應用程序將要安裝的位置。我運行了一個日誌文件,它說錯誤0x80070715:無法獲取自定義操作DLL的文件版本,儘管我已經向我的DLL添加了一個版本號 – 2012-07-26 16:19:07