Uninstallation from C#
Posted on March 17, 2009
I wanted to programatically uninstall an application installed in my system. Following code is a working piece to uninstall any custom application from the system.
Note: Following code snippet is not the best example of good coding standards ! It was just a sample I was trying to use to achieve something. The code is a mixture of coding styles lifted across various sites. Please excuse for that
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | private static int Uninstall() { 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 = "My Custom Application"; for (int i = 0; i < Names.Length; i++) { Microsoft.Win32.RegistryKey FTemp = Fregistry.OpenSubKey(Names[i]).OpenSubKey("InstallProperties"); if (FTemp == null) continue; string appFound = (FTemp.GetValue("DisplayName") == null) ? String.Empty : FTemp.GetValue("DisplayName").ToString(); if (!String.IsNullOrEmpty(appFound)) System.Diagnostics.Trace.WriteLine("Found Software: " + appFound); if (String.Compare(appFound, ApplicationName, true) == 0) { String installedVersion = FTemp.GetValue("DisplayVersion").ToString(); if (!installedVersion.StartsWith("3.1."))//can be removed if only one version is installed continue; object obj = FTemp.GetValue("UninstallString"); if (obj == null) uninstall = ""; else uninstall = obj.ToString(); i = Names.Length; } } if (String.IsNullOrEmpty(uninstall)) { return -1; } System.Console.WriteLine(uninstall); System.Diagnostics.Process FProcess = new System.Diagnostics.Process(); string temp = "/passive /x{" + uninstall.Split("/".ToCharArray())[1].Split("I{".ToCharArray())[2]; FProcess.StartInfo.FileName = uninstall.Split("/".ToCharArray())[0]; FProcess.StartInfo.Arguments = temp; FProcess.StartInfo.UseShellExecute = false; FProcess.Start(); FProcess.WaitForExit(); if (FProcess.ExitCode != 0) return -1; else { return 0; } } |

