c# 自定义安装程序路径(设置安装路径多一层目录)+卸载前执行操作
发布人:shili8
发布时间:2023-06-05 08:34
阅读次数:133
在开发C#程序时,我们经常需要为程序编写安装程序,以便用户可以方便地安装和卸载程序。但是,有时候我们需要自定义安装程序的路径,或者在卸载程序之前执行一些操作。本文将介绍如何使用C#编写自定义安装程序路径和卸载前执行操作的代码。
1. 自定义安装程序路径
默认情况下,安装程序会将程序安装到“Program Files”目录下。但是,有时候我们需要将程序安装到其他目录下,或者在安装路径中添加一层目录。下面是一个示例代码,演示如何自定义安装程序路径:
csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace MyInstaller { [RunInstaller(true)] public partial class MyInstaller : Installer { public MyInstaller() { InitializeComponent(); } public override void Install(IDictionary<string object> stateSaver) { base.Install(stateSaver); // 获取安装路径 string targetDir = Context.Parameters[targetdir]; // 在安装路径中添加一层目录 string installDir = Path.Combine(targetDir MyApp); // 设置安装路径 stateSaver.Add(InstallDir installDir); } public override void Commit(IDictionary<string object> savedState) { base.Commit(savedState); // 获取安装路径 string installDir = (string)savedState[InstallDir]; // 在安装路径中创建目录 Directory.CreateDirectory(installDir); } } }
在上面的代码中,我们重写了Install方法和Commit方法。在Install方法中,我们获取了安装路径,并在其中添加了一层目录。然后,我们将安装路径保存到stateSaver中,以便在后续的操作中使用。在Commit方法中,我们获取了安装路径,并在其中创建了一个目录。
2. 卸载前执行操作
有时候,我们需要在卸载程序之前执行一些操作,例如删除程序创建的文件或者清除注册表项。下面是一个示例代码,演示如何在卸载程序之前执行操作:
csharp using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.IO; using System.Linq; using System.Reflection; using System.Threading.Tasks; namespace MyInstaller { [RunInstaller(true)] public partial class MyInstaller : Installer { public MyInstaller() { InitializeComponent(); } public override void Uninstall(IDictionary<string object> savedState) { base.Uninstall(savedState); // 获取安装路径 string installDir = (string)savedState[InstallDir]; // 删除程序创建的文件 string[] files = Directory.GetFiles(installDir); foreach (string file in files) { File.Delete(file); } // 清除注册表项 Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(SoftwareMyApp); if (key != null) { Microsoft.Win32.Registry.CurrentUser.DeleteSubKey(SoftwareMyApp); } } } }
在上面的代码中,我们重写了Uninstall方法。在该方法中,我们获取了安装路径,并删除了程序创建的文件。然后,我们清除了注册表项。注意,我们需要使用Microsoft.Win32.Registry类来访问注册表。