2009-07-31 151 views
11

卸載應用程序時,需要通知服務器,以便它可以釋放分配給客戶端的許可證密鑰。這是通過Web服務調用完成的。Wix中的C#自定義操作

我創建了一個C#自定義操作。問題是,卸載程序正在放棄說它無法找到一個dll。

錯誤日誌爲MSI包含以下錯誤:

Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. Action ReadLicenseKeyFromFile, entry: ReadLicenseKey, library: C:\Windows\Installer\MSI4F42.tmp

我有標記爲自定義操作的功能ReadLicenseKey。自定義操作名爲ReadLicenseKeyFromFile。

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize"> 
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE 
</Custom> 

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" /> 

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" /> 

自定義操作項目正在輸出.CA.dll文件。我已經嘗試安裝文件作爲安裝的一部分,手動複製粘貼文件,對文件沒有做任何事情......基本上嘗試了所有可能的組合。

必須有我丟失的東西,所以請幫助。

回答

11

抱歉有浪費了每個人的時間。

該解決方案過於簡單。我忘記了將[CustomAction]屬性放在這個特定的方法上。所以即使它是我在CustomAction.cs文件中寫入的最後一個動作,它也是第一個在InstallExecuteSequence中調用的動作。正因爲如此,我誤以爲它無法找到該文件。那麼,以及這一事實,我一定很困...

無論如何,雖然尋找答案,我確實設法遇到很多很好的資源,特別是Alex Shevchuks series on Wix。我意識到的另一件事是,我不必安裝自定義動作DLL文件。我只是從我的Wix項目中引用它並提供它的路徑。 dll會嵌入到設置中,並在調用卸載自定義操作時從那裏進行流式傳輸。

0

UnInstallCA.CA.dll是否在安裝過程中被複制到目標機器上?看來,它不在卸載。

如果它到達那裏 - 它可以運行嗎? (嘗試從目標機器運行它,看看它是否可以做它應該做的事情 - 也許你需要從其中發佈一些其他dll - 或者可能是一些可再發行的軟件包)

+0

是的,安裝DLL在安裝時被複制。 不,我不知道如何模擬dll的使用。如果你的意思是通過創建一個引用dll的新項目然後調用該函數,那麼發生。 – 2009-07-31 20:35:31

+0

@Anton Tykhyy - 我被告知你在一個小時前發佈了一個我的問題的答案,但我看不到那個答案。從我的檔案中,我只能看到答案的一部分。 自定義操作項目正在從DTF運行必需的實用工具,該工具將託管的dll轉換爲非託管的.CA.dll。和這個.CA.dll是我正在安裝與我的設置一起。有無論如何,我可以檢查什麼路徑是設置看着找到DLL? – 2009-07-31 20:41:27