2012-04-03 5 views
0

У меня есть установочный пакет MSI, который устанавливает приложение .net. Он также устанавливает файл Uninstall.bat, который выполняет деинсталляцию через msiexec/x. Но он не удаляет user.config файл, созданный пользователем Локальные настройки \ Папка данных приложения \ Название компании \ Папка продукта.Удалить user.config при удалении с помощью командной строки msiexec/x

Я не уверен, как это сделать, поскольку я не могу определить какой-либо вариант в самом Installer.

Я могу создать еще один пакетный файл, который может выполнять эту работу, но не уверен, что это будет правильный путь. Кроме того, если я попытаюсь сделать это с Batch-файлом, как бы я узнал, что текущий пользователь достигает правильной папки? Я не хочу делать это слишком сложно. Есть простой способ сделать это.

Просьба предложить.

ответ

0

Я получил его для работы. Я создал новый консольный проект «UninstallHelper» в решении. Добавлен InstallerClass в UninstallHelper проект. Я переопределение метода 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(); 
     } 

Теперь я добавляю Главный результат этого проекта в программе установки. И, наконец, I Добавить необязательное действие в Uninstall в качестве основного результата от UninstallHelper project.

Это сделало трюк для меня.