2017-10-17 44 views
1

我正在創建一個C#.NET WinForms應用程序,並且我將該安裝程序創建爲Visual Studio安裝項目。Visual Studio安裝項目 - 在運行時創建的文件在卸載時不會被刪除

在Windows 10上,我可以刪除控制面板中安裝的文件。但是,在運行時,我的應用程序會創建一個包含日誌文件的文件夾,並且在卸載應用程序時不會刪除此文件夾和日誌文件。

如何在卸載程序時將這些文件也刪除?

+0

您是否使用ClickOnce發佈應用程序? – ZerosAndOnes

+0

不確定ClickOnce是什麼..我在Visual Studio中構建安裝程序 – shadowsora

+0

[卸載clickonce應用程序後刪除額外文件]的可能副本(https://stackoverflow.com/questions/7829151/removing-extra-files-after -uninstalling-a-clickonce-application) – user12345

回答

3

您可以使用自定義安裝程序操作在安裝或卸載應用程序期間執行自定義操作。爲此,您需要添加一個新的類庫,其中包含一個派生自CustomAction的類。

爲此,請按照下列步驟操作:

  1. 添加一個新的安裝項目。 (如果您沒有項目模板,請從此處下載並安裝它,以獲取VS2013VS2015VS2017
  2. 將主項目的主要輸出添加到安裝項目中。
  3. 添加一個新的類庫項目。
  4. 將新安裝程序操作添加到類庫項目,並在這些步驟結束時使用代碼。
  5. 上安裝項目類庫的主輸出添加到安裝項目
  6. 右鍵單擊在解決方案資源管理和查看菜單,選擇自定義操作
  7. 在自定義actin編輯器中,右鍵單擊卸載並選擇添加自定義動作...並選擇類庫的主輸出。
  8. 將操作重命名爲RemoveFiles和屬性集CustomActionData屬性完全爲/path="[TARGETDIR]\"
  9. 重建解決方案和設置項目。
  10. 安裝該項目。

代碼自定義操作

增加提及System.Configuration.Install組裝,然後添加一個類有以下內容的項目。你可以在這裏簡單地使用任何你需要的邏輯。

using System.Collections; 
using System.ComponentModel; 
using System.Configuration.Install; 

namespace InstallerActions 
{ 
    [RunInstaller(true)] 
    public partial class RemoveFiles : Installer 
    { 
     protected override void OnAfterUninstall(IDictionary savedState) 
     { 
      var path = System.IO.Path.Combine(Context.Parameters["path"], "log"); 
      System.IO.Directory.Delete(path, true); 
     } 
    } 
} 
+0

正是我在找的東西!只是想知道,而不是使用特定的目標目錄,反正我可以抓住安裝目錄嗎? AppDomain.CurrentDomain.BaseDirectory(我在主應用程序中使用的)沒有實現這一點。 – shadowsora

+1

'Context.Parameters [「path」]是安裝目錄。 –

相關問題