2017-10-17 289 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”]是安装目录。 –

相关问题