2011-09-01 281 views
3
  1. 我已經在VS 2010中使用安裝項目創建了一個安裝程序。它將我的應用程序安裝到程序文件文件夾中讓我們說XXX。我的應用程序進一步創建一些文件和文件夾到XXX文件夾。在卸載時,它會刪除由安裝程序創建的所有內容,而由我的應用程序創建的文件和文件夾仍保留在XXX中。如何在卸載時刪除應用程序文件夾

  2. 我寫了一些自定義代碼來使用installerclass刪除文件夾(XXX),但是當用戶從控制面板上卸載時執行成功時不會執行,當從我創建的安裝程序卸載時成功執行。

+3

@Davide我知道這並不回答你的問題,但你應該避免在你的應用程序安裝文件夾中寫入任何東西 - 沒有適當權限的用戶可能會導致你的應用程序失敗。 (OTOH,我承認,即使您寫入AddData或類似的文件,您的卸載問題仍將保留) –

+0

感謝Davide的建議,我會牢記這一點。 – Vipul

回答

1

我不認爲你應該寫的任何自定義代碼,如果您所有的文件被標記爲臨時的,不是永久的,這將直接由MSI引擎處理。

玩文件夾,文件和安裝項目本身的配置和屬性,你會得到你所需要的,沒有代碼寫入。

+0

你能幫我解決上述問題嗎?在我的情況下,我的應用程序在運行時創建了幾個文件,導致從控制面板卸載MSI的過程不去除包含文件的文件夾。我的要求是卸載MSI所有與wwwroot文件夾一起存在的文件夾應該被刪除並且wwwroot文件夾必須是乾淨的。你能幫我解決這個問題嗎? –

+0

我用PowerShell腳本卸載MSI,並在該代碼現在我打電話給下面的PowerShell,它可以幫助我刪除文件夾中的所有文件夾:刪除項目「C:\ Temp \ Fldr \ *」 - 強制 - 撤消 - ErrorAction SilentlyContinue並解決了問題。 –

2

第一步是修改您的應用程序,以便將其數據寫入每個用戶的位置而不是應用程序文件夾。例如,您可以在當前用戶的AppData目錄中使用自定義文件夾。這樣您可以避免與權限相關的問題。

要刪除此文件夾,您確實可以使用自定義操作。如果它在您的安裝項目中的卸載下添加,它應該同時運行控制面板和程序包卸載。

嘗試創建一個並搜索您的自定義操作名稱以查看會發生什麼。

1

我的猜測是您的自定義刪除文件操作安排在UI部分。當從控制面板啓動卸載時,它將以最小UI模式運行,並跳過所有對話框。

您的自定義操作必須安排在InstallExecute表中。
(與UAC兼容的,它必須是推遲noimpersonate。然而,你的應用程序本身不兼容UAC,因此它並不真正的問題。)

相關問題