【问题标题】:Visual Studio Setup Project - Remove files created at runtime when uninstallVisual Studio 安装项目 - 卸载时删除运行时创建的文件
【发布时间】:2018-03-28 22:02:03
【问题描述】:

我正在创建一个 C# .NET WinForms 应用程序,并将安装程序创建为 Visual Studio 安装项目。

在 Windows 10 上,我可以在控制面板中删除已安装的文件。但是,在运行时,我的应用程序会创建一个包含日志文件的文件夹,并且在卸载应用程序时不会删除此文件夹和日志文件。

如何使这些文件在程序卸载时也被删除?

【问题讨论】:

标签: c# .net winforms visual-studio setup-deployment


【解决方案1】:

您可以使用自定义安装程序操作在安装或卸载应用程序期间执行自定义操作。为此,您需要添加一个新的类库,其中包含一个派生自 CustomAction 的类。

为此,请按以下步骤操作:

  1. 添加一个新的安装项目。 (如果您没有项目模板,请从此处下载并安装 VS2013VS2015VS2017 and VS2019
  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);
        }
    }
}

【讨论】:

  • 正是我想要的!只是想知道,而不是使用特定的目标目录,无论如何我可以获取安装目录吗? AppDomain.CurrentDomain.BaseDirectory(我在主应用程序中使用的)没有实现这一点
  • Context.Parameters["path"] 是安装目录。
  • 这篇文章真的很有帮助。就我而言,我想在卸载应用程序后删除文件。所以我在 OnAfterUninstall 上编写了安装程序代码,但它会删除我想要的文件,然后卸载应用程序。奇怪的。有什么建议吗?
  • 如何删除安装目录外的目录?
  • @Zimo,如果你已经创建了它们,你应该在配置文件或其他地方有路径,然后你可以删除它们。另一种选择是您可能知道它们相对于安装文件夹的路径,然后您可以轻松地将相对路径与安装文件夹路径结合起来,然后将其删除。
猜你喜欢
  • 1970-01-01
  • 2011-01-02
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2010-10-01
  • 2012-01-06
相关资源
最近更新 更多