2014-10-30 78 views
1

我正在使用wix安裝程序覆蓋(閱讀:修改現有的註冊表值),添加新的等。卸載時,我需要恢復它們回到它們的原始狀態(我修改)。由於這不被Wix支持,因此我必須使用自定義操作(因爲我讀了),我想運行一個exe文件,它將使用reg import運行.reg文件。根據此網站:http://www.installsite.org/pages/en/isnews/200108/index.htm我的自定義操作必須運行After="InstallFinalize",因爲wix回滾會刪除我的註冊表導入(作爲回滾的一部分)。 所以基本上看起來像這樣:安裝程序修改註冊表值,卸載程序刪除所有觸及的註冊表更改(部分回滾),我的exe將恢復它們。Wix - 如何在卸載後執行installfinalize後運行exe文件?

所以我按照他怎麼樣,開始我與提升權限的exe等 http://wixtoolset.org/documentation/manual/v3/customactions/qtexec.html

  <Component Id="registry" Guid="*"> 
       <File Id="regexe" Source="RegistryRollback.exe"/> 
       <File Id="regfile" Source="Reg_rollback.reg" /> 
      </Component> 

<Property Id="LaunchRegExe" Value="[#regexe]" /> 
<CustomAction Id="LaunchRegExe" BinaryKey="WixCA" DllEntry="CAQuietExec" Execute="deferred" Return="check" Impersonate="no"/> 

<Custom Action='LaunchRegExe' After='InstallFinalize'>Installed AND NOT UPGRADINGPRODUCTCODE</Custom> 

沒有,但我得到一個Error 19 ICE77: LaunchRegExe is a in-script custom action. It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table C:\Merlin\Main\Demo\KioskDemoSetup\nw_setup\nw.wxs 250 1 nw_setup

謝謝您的幫助!

+0

在這裏沒有看到整個圖片...你在哪裏修改註冊表值?您擔心回滾操作會在哪裏恢復您的更改?從我們在這裏看到的,除了延遲操作必須在'InstallInitialize'和'InstallFinalize'之間運行,您的操作只能在卸載時運行,取消操作時的操作會有所不同。意味着您的exe只能在卸載時運行,在延遲的上下文中,在(un)安裝完成之前的某個時候。 – 2014-10-31 00:13:39

回答

2

According to this site: http://www.installsite.org/pages/en/isnews/200108/index.htm my custom action has to run After="InstallFinalize" because the wix rollback would delete my registry import (as part of the rollback).

你能指定這個網站上提到的地方嗎?我正在查看它,但無法找到您的操作應該以After="installFinelize"運行的原因。

什麼它提到,是

Deferred, rollback and commit custom actions can only be placed between InstallInitialize and InstallFinalize

哪個是你錯誤的原因:你有延遲的作用,但要經過 installfinalize運行它

如果安裝(或卸載)中止(例如用戶取消時),則會執行回滾腳本。我想你可以簡單地用Before="InstallFinalize"來運行你的動作。

+0

它在安裝執行序列中。 「第二階段是目標計算機被修改的地方,即文件被複制,註冊表項被寫入等。」 我的回滾意思是回滾安裝程序所做的所有更改,例如,刪除安裝文件夾,回滾安裝過程中對註冊表執行的更改(讀取:刪除它們)。所以根據該網站,我需要運行EXE後,因爲如果不是,那麼我的EXE會恢復註冊表,只有被WIX刪除。或者我在這裏誤解了什麼? – sceiler 2014-10-30 22:05:28

+0

這些現有的註冊表項是否被覆蓋或由安裝程序創建?在第一種情況下,我不確定他們是否會被默認的卸載刪除......不過,如果您想確保腳本在註冊表刪除步驟後執行,我認爲您可以使用'After =' RemoveRegistryValues'(但必須在安裝完成之前,因爲在此之後無法執行延遲操作)。不幸的是我目前無法測試它,但基於文檔它應該可以工作。 – 2014-10-31 01:33:39

相關問題