2012-04-03 84 views
0

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

我不知道我该怎么做,因为我无法弄清楚安装程序本身的任何选项。

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

请建议。

回答

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(); 
     } 

现在我加入这个项目的主要输出在安装程序中。最后,我添加一个自定义动作在卸载作为主输出从UninstallHelper项目。

这对我来说诀窍。