2011-11-21 19 views
4

我一直在關注這個問題中的建議。Wix:如何將文件添加到C++的RemoveFiles表中

How to add a WiX custom action that happens only on uninstall (via MSI)?

我有一個可執行文件運行的InstallFinalize後自定義操作我打算清除我的所有文件和文件夾。我只是想寫一些標準的刪除邏輯,但我堅持的觀點是Rob Mensching認爲Windows安裝程序應該處理這個事情,因此在卸載過程中有人會中途退出。

「創建一個CustomAction,增加了臨時行到RemoveFiles表」

我在找一些這方面的更多信息。我真的不知道如何在C++中實現這一點,我的搜索沒有發現很多。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa371201(v=vs.85).aspx

感謝 尼爾


編輯:我已經打上了答案,由於這個問題是具體的關於如何在C文件添加到removeFiles表++不過我傾向於同意更好的解決方案是使用wix中的RemoveFolderEx功能,即使它目前處於測試階段(3.6我認爲)

回答

3

粗略地說,您將不得不按以下順序使用以下功能:

  • MsiDatabaseOpenView - 的(輸入)句柄是你內心的自定義操作的功能得到了一個
  • MsiCreateRecord - 與SQL的東西創造紀錄的內部
    • MsiRecord* - 的功能來準備記錄集
  • MsiViewExecute插入新記錄到任何表請你...
  • MsiCloseHandle - 從第一步和記錄手柄(從MsiCreateRecord

一切都詳細解釋over at MSDN。但是,請特別注意「自定義操作中不使用的功能」部分。

MsiViewExecute的文檔也解釋了SQL查詢的外觀。要感受它們,您可能需要使用作爲Windows Installer SDK一部分的.vbs腳本之一。

3

如果您使用WiX創建安裝包,請考慮使用RemoveFolderEx元素。它做你想做的事情,你不必自己編寫代碼。

有關如何使用它的示例,請參閱Tactical directory nukes


如果你還是想自己實現它,你可以從this blog post獲得靈感,還有在VBScript中這樣的代碼。

+2

+1,我不知道RemoveFolderEx已經在工具集中了。這很好! @Neil,我強烈建議你使用這種方法 - 無論如何,它會比任何自定義操作更好,更安全。 –

相關問題