2012-04-03 81 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項目。

這對我來說訣竅。