我有一个安装.net应用程序的MSI安装程序包。它还会安装 Uninstall.bat 文件,该文件通过 msiexec / x 选项进行卸载。但它不会删除在用户 本地设置\应用程序数据文件夹\公司名称\产品文件夹中创建的 user.config 文件。
我不知道如何做到这一点,因为我无法找到安装程序本身的任何选项。
我可以创建另一个可以完成工作的批处理文件,但不确定这是否是正确的方法。此外,如果我尝试使用批处理文件,我如何找出当前用户到达正确的文件夹?我不想让它变得太复杂。是否有一种简单的方法。
请建议。
答案 0 :(得分:0)
我得到了它的工作。我在解决方案中创建了一个新的控制台项目“ UninstallHelper ”。在 UninstallHelper 项目中添加了 InstallerClass 。我正在覆盖 OnBeforeUninstall 方法:
protected override void OnBeforeUninstall(IDictionary savedState)
{
base.OnBeforeUninstall(savedState);
try
{
List<string> appFolders = new List<string>();
string userFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
string userDataFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
userFolderPath = userFolderPath + @"\CompanyName";
userDataFolderPath = userDataFolderPath + @"\CompanyName";
appFolders.Add(userFolderPath);
appFolders.Add(userDataFolderPath);
foreach (string folderPath in appFolders)
{
List<string> umDirs = new List<string>();
DirectoryInfo targetDir = new DirectoryInfo(folderPath);
foreach (DirectoryInfo dir in targetDir.GetDirectories())
{
if (dir.Name.StartsWith("ProductName"))
umDirs.Add(dir.FullName);
}
foreach (string dirName in umDirs)
{
DirectoryInfo subDir = new DirectoryInfo(dirName);
foreach (FileInfo file in subDir.GetFiles())
{
if (file.Exists)
file.Delete();
}
foreach (DirectoryInfo dir in subDir.GetDirectories())
{
if (dir.Exists)
dir.Delete(true);
}
subDir.Delete();
}
}
}
catch(Exception ex)
{
//Console.WriteLine(ex.Message);
//Console.ReadKey();
}
现在我在安装程序中添加此项目的Primary OutPut。最后,我 在卸载中添加自定义操作 作为 UninstallHelper 项目的主要输出。
这对我有用。