2013-07-30 46 views
6

我已閱讀本網站上有這樣的問題,所有的話題,但沒有找到我需要什麼。威克斯 - 如何刪除非空文件夾

我有一個程序兩個版本:新老。 在舊版本中我有文件夾f1。 在新版本中我沒有這個文件夾f1。

當新PROGRAMM的安裝程序檢測舊版本,它刪除舊版本,而不是文件夾F1。

如何從新版的安裝程序刪除F1?

 <Component Id ="deleteall" Guid="AA11A32B-9E1E-458A-8C94-3EFEDA77E494" > 
     <RemoveFolder Id='iDocDir' On='both' /> 
     </Component> 

     <Directory Id="iDocDir" Name="iDocs"> 
     </Directory> 

沒有工作=(

+0

您正在進行重大升級還是次要升級? –

回答

11

你應該看看RemoveFolderEx element in the UtilExtension,這不正是你想要的東西。Bob Arnson has blogged about it before.

<Component Id="deeletall" Guid="PUT-GUID-HERE"> 
    <util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" /> 
</Component> 

它可以通過編寫臨時rowes到RemoveFile表。有限制使用這一點,但是,如手冊中指出:

因爲它可能會顯着影響Windows安裝程序的文件成本覈算, 臨時行必須在CostInitialize標準 行動之前被寫入。不幸的是,MSI不會爲您的軟件包中的 目錄層次結構創建屬性,直到稍後的CostFinalize 操作中。

卸載過程中,卸載文件夾的典型用例的簡單解決方法是將目錄路徑寫入註冊表,並在卸載過程中加載 。

如果您使用自定義操作來設置屬性,請確保它們是在WixRemoveFoldersEx自定義操作之前計劃的 。

而且還Bob的帖子:

作爲添加目錄和文件將被刪除影響MSI的文件 成本覈算,RemoveFolderEx具有成本之前做的事情。 不幸的是,在成本計算完成之後,MSI不會爲目標目錄 設置屬性。

如果你已經保存您以前的安裝路徑(羅布解釋如何做到這一點here)在註冊表中,你很好,作爲AppSearch操作CostInitialize之前運行。

+0

警告:On =「uninstall」也會刪除升級時的文件夾。 – Simon