2013-11-21 50 views
1

我有這樣的維克斯片段:下的應用數據,該程序存儲數據如何在卸載過程中有條件地刪除文件?

<Component Id="AppData" Guid="{30967EFB-4B86-4EBB-8486-5271D051082E}"> 
    <Condition>NOT KEEPAPPDATA</Condition> 
    <RemoveFile Id="PurgeAppData" Name="*.*" On="uninstall" /> 
    <RemoveFolder Id="RemoveAppDataFolder" On="uninstall" /> 
</Component> 

在適當<Directory>元件的目錄。然而這兩種

msiexec /xpath-to-msi.msi KEEPAPPDATA="TRUE" 

msiexec /xpath-to-msi.msi 

刪除的文件夾,這樣的條件不工作。我也試過這種情況:

<Condition>KEEPAPPDATA == ""</Condition> 

具有相同的結果。

在卸載過程中將參數傳遞給msiexec以更改行爲的正確方法是什麼?看來參數只是被忽略。

+0

您是否嘗試將其設置爲「#1」? – codemonkeh

回答

1

默認情況下,在卸載過程中不評估組件條件。這是一個類似Stackoverflow question與Rob Mensching的答案。他建議使用傳遞屬性。 From documentation

如果此屬性設置爲'yes',安裝程序會在重新安裝時重新評估Condition中語句的值。如果該值先前爲False並已更改爲True,則安裝程序會安裝該組件。如果該值先前爲True且已更改爲False,則即使該組件具有其他產品作爲客戶端,安裝程序也會刪除該組件。

+0

爲''元素添加'Transitive ='yes''似乎沒有任何區別 - 文件仍被無條件地刪除。 –