2015-04-18 57 views
1

使用VS 2013,我有一箇舊的Windows Installer項目,我正在轉換爲WiX。我已經完成了90%的WiX項目,並顯示相應的對話框,並將所有文件複製到適當的位置。但是,我的最終任務是轉換舊安裝程序項目中定義的自定義操作,位於安裝,提交,回滾和卸載部分下。WiX - 安裝和卸載(或回滾)參數的多個自定義操作

我一直在審查WixToolset Site的代碼,但我很困惑,因爲我不知道WixShellExecTarget屬性如何與CustomAction綁定(因爲它沒有引用該ID值),我不確定如何傳入參數。另外,我不希望這些操作基於對話框中的複選框......他們應該始終運行。

基本上,而不使用對話複選框(我「認爲」可以通過使用相對於所述UI\Publish部分InstallExecuteSequence部被全美基礎),在安裝(或提交),我需要以下,以便運行:

[INSTALLFOLDER]RegisterExtensionDotNet20.exe -i "[INSTALLFOLDER]MyNamespaceExtension.dll" 
[INSTALLFOLDER]MyApplication.exe 

然後,當卸載(或回滾),之前的文件從文件夾中刪除,我只需要以下運行(注意,從「-i」對參數的變化,以「-u」 ):

[INSTALLFOLDER]RegisterExtensionDotNet20.exe -u "[INSTALLFOLDER]MyNamespaceExtension.dll" 

這裏是我的代碼snippit(只是第一個動作...我還沒有想出如何命名第二個動作來運行MyApplication.exe),但它似乎並沒有運行時安裝(和我還沒有想出卸載部分)。

<Product> 

    <!-- UI, Properties, Directories, Components and Features defined here... --> 

    <Property Id="WixShellExecTarget" Value="[INSTALLFOLDER]RegisterExtensionDotNet20.exe -i '[INSTALLFOLDER]MyNamespaceExtension.dll'" /> 

    <CustomAction Id="RegisterDotNetExtensionx64" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> 

    <InstallExecuteSequence> 
    <Custom Action="RegisterDotNetExtension" Before="InstallFinalize" /> 
    </InstallExecuteSequence> 

</Product> 

任何輸入,非常感謝!

回答

0

假設我已經理解了registerextensionDotnet20.exe,則不需要它。對於組裝註冊,請查看WiX工具集中的Heat.exe。這種事情:

How to run heat.exe and register a dll in wix

的你不需要任何東西,沒有回退,沒有卸載等,因爲這一切都變得在自動處理每件事的MSI文件的註冊表數據的一部分。

(即使在VS的設定你應該已經能夠通過DLL的屬性設置爲vsdraCOM的味道來做到這一點。)

+0

感謝您的信息,但registerextensionDotnet20.exe是SSWare的EZNamespaceExtensions程序。它基本上爲MyApplication使用的虛擬驅動器創建一個Windows外殼擴展。要安裝擴展,我必須調用他們的EXE,傳入我的DLL,以便它正確地註冊它的組件。我不認爲heat.exe可以取代這個功能。那有意義嗎? – bigmac

相關問題