2013-06-20 214 views
6

在安裝新版本之前,我正在執行主要升級和卸載現有產品。但我想保留現有的配置文件。Wix CopyFile在卸載之前卸載並恢復後卸載

由於早期版本沒有永久性=「是」,它會在卸載時刪除配置文件。

我該如何做這樣的事情,在卸載之前將'app.config'的副本作爲'app.config.bak'。卸載後,將其從「app.config.bak」恢復爲「app.config」。

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="BackupConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="BackupConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config.bak" /> 
    </Component> 
</DirectoryRef> 

<DirectoryRef Id="INSTALLDIR"> 
    <Component Id="RestoreConfigComponent" Guid="87368AF7-4BA2-4302-891A-B163ADDB7E9C"> 
    <CopyFile Id="RestoreConfigFile" SourceDirectory="INSTALLFOLDER" SourceName="app.config.bak" DestinationDirectory="INSTALLFOLDER" DestinationName="app.config" /> 
    </Component> 
</DirectoryRef> 


<InstallExecuteSequence> 
    <Custom Action="BackupConfigFile" After="InstallInitialize" /> 
    <RemoveExistingProducts After="InstallInitialize" /> 
    <Custom Action="RestoreConfigFile" After="InstallInitialize" /> 
</InstallExecuteSequence> 

感謝

回答

3

所有你需要做的是改變<Custom Action="RestoreConfigFile" After="InstallInitialize" /><Custom Action="RestoreConfigFile" After="RemoveExistingProducts " />

這僅僅是你有一個時機的問題。您將在InstallInitialize之後告訴所有這三個動作,因此很可能它們不會按照它們寫入的順序。它始終是一個更好的主意,明確列出你希望他們在爲了一個更好的,完整的修補程序,應該是:

<Custom Action="BackupConfigFile" After="InstallInitialize" /> 
<RemoveExistingProducts After="BackupConfigFile" /> 
<Custom Action="RestoreConfigFile" After="RemoveExistingProducts " /> 

編輯:(基於評論) 要創建的MSI自定義操作,你會需要製作一個CustomAction元素。創建自定義操作的代碼也是需要的。但是,如果你只是試圖複製一個文件,我會建議使用CopyFile元素。這比通過所有自定義操作步驟來做我認爲你要做的事情要容易得多,也更清潔。

+0

它表示錯誤 Custom/@ After屬性值'RemoveExistingProducts'不是合法標識符。標識符可能包含ASCII字符A-Z,a-z,數字,下劃線(_)或句點(。)。每個標識符必須以字母或下劃線開頭。 –

+0

好吧,這是由於空間,但現在它說,'產品:*'節中符號'CustomAction:BackupConfigFile'的未解析引用。 –

+1

您是否使用名稱BackupConfigFile創建了自定義操作?這不是Windows Installer將爲您提供的標準自定義操作。 – Adkins