Visual Studio 安装项目 - 卸载时删除运行时创建的文件
Visual Studio Setup Project - Remove files created at runtime when uninstall
我正在创建一个 C# .NET WinForms 应用程序,并将安装程序创建为 Visual Studio 安装项目。
在Windows10,我可以在控制面板中删除安装的文件。但是,在运行时,我的应用程序会创建一个包含日志文件的文件夹,并且在卸载应用程序时不会删除该文件夹和日志文件。
如何让这些文件在卸载程序时也被删除?
您可以使用自定义安装程序操作在安装或卸载应用程序期间执行自定义操作。为此,您需要添加一个新的 class 库,其中包含派生自 CustomAction
.
的 class
为此,请按照下列步骤操作:
- 添加一个新的安装项目。 (如果您没有项目模板,请从此处下载并安装 VS2013, VS2015 or VS2017 and VS2019)
- 将主项目的主要输出添加到安装项目。
- 添加一个新的 class 库项目。
- 向 class 库项目添加一个新的安装程序操作,并使用这些步骤末尾的代码。
- 将 class 库的主要输出添加到安装项目
- 在解决方案资源管理器和视图菜单中右键单击设置项目,select 自定义操作。
- 在自定义肌动蛋白编辑器中,右键单击卸载并select 添加自定义操作... 和select [=55= 的主要输出]图书馆。
- 将操作重命名为 RemoveFiles 并在属性中将
CustomActionData
属性 精确设置为 /path="[TARGETDIR]\"
.
- 重建解决方案和安装项目。
- 安装项目。
自定义操作代码
添加对 System.Configuration.Install
程序集的引用,然后向包含以下内容的项目添加 class。您可以在这里简单地拥有您需要的任何逻辑。
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);
}
}
}
我正在创建一个 C# .NET WinForms 应用程序,并将安装程序创建为 Visual Studio 安装项目。
在Windows10,我可以在控制面板中删除安装的文件。但是,在运行时,我的应用程序会创建一个包含日志文件的文件夹,并且在卸载应用程序时不会删除该文件夹和日志文件。
如何让这些文件在卸载程序时也被删除?
您可以使用自定义安装程序操作在安装或卸载应用程序期间执行自定义操作。为此,您需要添加一个新的 class 库,其中包含派生自 CustomAction
.
为此,请按照下列步骤操作:
- 添加一个新的安装项目。 (如果您没有项目模板,请从此处下载并安装 VS2013, VS2015 or VS2017 and VS2019)
- 将主项目的主要输出添加到安装项目。
- 添加一个新的 class 库项目。
- 向 class 库项目添加一个新的安装程序操作,并使用这些步骤末尾的代码。
- 将 class 库的主要输出添加到安装项目
- 在解决方案资源管理器和视图菜单中右键单击设置项目,select 自定义操作。
- 在自定义肌动蛋白编辑器中,右键单击卸载并select 添加自定义操作... 和select [=55= 的主要输出]图书馆。
- 将操作重命名为 RemoveFiles 并在属性中将
CustomActionData
属性 精确设置为/path="[TARGETDIR]\"
. - 重建解决方案和安装项目。
- 安装项目。
自定义操作代码
添加对 System.Configuration.Install
程序集的引用,然后向包含以下内容的项目添加 class。您可以在这里简单地拥有您需要的任何逻辑。
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);
}
}
}