转载 https://blog.csdn.net/zhoyuwo/article/details/114040885
public static List<AppInfo> GetApps(ref Exception exception)
{
List<AppInfo> apps = new List<AppInfo>();
string tempType = null;
object displayName = null, uninstallString = null, releaseType = null;
RegistryKey currentKey = null;
int softNum = 0;
RegistryKey pregkey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall");
try
{
foreach (string item in pregkey.GetSubKeyNames())
{
currentKey = pregkey.OpenSubKey(item);
displayName = currentKey.GetValue("DisplayName");
uninstallString = currentKey.GetValue("UninstallString");
releaseType = currentKey.GetValue("ReleaseType");
bool isSecurityUpdate = false;
if (releaseType != null)
{
tempType = releaseType.ToString();
if (tempType == "Security Update" || tempType == "Update")
isSecurityUpdate = true;
}
if (!isSecurityUpdate && displayName != null && uninstallString != null)
{
apps.Add(new AppInfo() {name = displayName.ToString(), uninstall = uninstallString.ToString() });
softNum++;
}
}
}
catch (Exception ex)
{
exception = ex;
}
finally
{
pregkey.Close();
}
return apps;
}
public static bool UnstallApp(string cmd)
{
Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = false;
p.StartInfo.Arguments = "/c " + cmd;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
p.Close();
return true;
}