2009-08-13 8 views
0

So deinstallieren Sie die Software programmatisch in C#.?So deinstallieren Sie die Software programmatisch in C#

Microsoft.Win32.RegistryKey Fregistry = Microsoft.Win32.Registry.LocalMachine.OpenSubKey ("SOFTWARE")

  .OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion") 
      .OpenSubKey("Installer").OpenSubKey("UserData") 
      .OpenSubKey("S-1-5-18").OpenSubKey("Products"); 
      string[] Names = Fregistry.GetSubKeyNames(); 
      string uninstall = ""; 
      string ApplicationName = "Studio V5"; 
      for (int i = 0; i < Names.Length; i++) 
      { 
       Microsoft.Win32.RegistryKey FTemp = Fregistry.OpenSubKey(Names[i]).OpenSubKey("InstallProperties"); 
       **if (FTemp.GetValue("DisplayName").ToString() == ApplicationName)** 
       { 
        object obj = FTemp.GetValue("UninstallString"); 
        if (obj == null) 
         uninstall = ""; 
        else 
         uninstall = obj.ToString(); 
        i = Names.Length; 
       } 
      } 

      System.Console.WriteLine(uninstall); 
      System.Diagnostics.Process FProcess = new System.Diagnostics.Process(); 
      string temp = "/x{" + uninstall.Split("/".ToCharArray())[1].Split("I{".ToCharArray())[2]; 
      //replacing with /x with /i would cause another popup of the application uninstall 
      FProcess.StartInfo.FileName = uninstall.Split("/".ToCharArray())[0]; 
      FProcess.StartInfo.Arguments = temp; 
      FProcess.StartInfo.UseShellExecute = false; 
      FProcess.Start(); 
      System.Console.Read(); 

ich einen Fehler bekam wie .... NULL-Verweis AUSNAHME in der ** Linie.

Antwort

2

Dies ist eine sehr unangenehme Möglichkeit, dies zu tun, und ich bezweifle, dass es auf jeden Fall funktioniert. Stattdessen sollten Sie die Funktionen Windows Installer API und speziell MsiConfigureProduct und/oder MsiConfigureFeature mit INSTALLSTATE_ABSENT verwenden, um alles programmatisch zu deinstallieren.

+0

Funktioniert dies mit Software, die nicht mit * Windows Installer * installiert wurde? – Treb

+0

Windows Installer ist in diesem Fall eine API, kein bestimmtes Installerformat (wie .msi). Ein Nicht-MSI-Installationsprogramm kann (und sollte) weiterhin WI-APIs verwenden, um alle installierten Komponenten zu registrieren. Wenn es das nicht tut, würde es wahrscheinlich auch nicht den Registrierungsschlüssel unter "Microsoft \ Installer" schreiben und ist sowieso nicht auffindbar. –

Verwandte Themen