0

我有一个安装 .net 应用程序的 MSI 安装程序包。它还安装通过msiexec/x选项执行卸载的Uninstall.bat文件。但它不会删除在用户本地设置\应用程序数据文件夹\公司名称\产品文件夹中创建的user.config文件。

我不确定该怎么做,因为我无法在安装程序本身中找出任何选项。

我可以创建另一个可以完成这项工作的批处理文件,但不确定这是否是正确的方法。另外,如果我尝试使用批处理文件执行此操作,我将如何找出当前用户以访问正确的文件夹?我不想让它太复杂。有没有一种简单的方法来做到这一点。

请建议。

4

1 回答 1

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。最后,我在 Uninstall 中添加了一个自定义操作作为UninstallHelper项目的主要输出。

这对我有用。

于 2012-04-04T09:41:37.070 回答