通过msiexec / x命令行选项删除卸载时的user.config

时间:2012-04-03 08:18:45

标签: .net msiexec uninstaller user.config

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

我不知道如何做到这一点,因为我无法找到安装程序本身的任何选项。

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

请建议。

1 个答案:

答案 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 项目的主要输出。

这对我有用。