请问下,为什么ProcessStartInfo启动一个卸载程序,无法进行阻塞呢?
System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();info.FileName = @"d:\1\uninst.exe";
info.Domain = "OK";
info.UseShellExecute = true;
System.Diagnostics.Process pro = null;
pro = System.Diagnostics.Process.Start(info);
pro.WaitForExit(3600000);//1小时
MessageBox.Show("");
一般的安装程序或者应用程序都能阻塞,就是卸载程序无法阻塞,不知道为什么 --------------------编程问答-------------------- uninst.exe一瞬间就执行完毕了。它只是触发主程序去卸载,它自己又不进行卸载动作。 --------------------编程问答-------------------- 那么请问下,怎么才能实现启动卸载程序,并等待其结束,获取是否卸载成功或者失败呢? --------------------编程问答-------------------- 没人回答.. --------------------编程问答-------------------- 顶,高人出来啊 --------------------编程问答-------------------- 试一试执行从注册表里取得
public string GetUninstallCommandFor(string productDisplayName)
{
RegistryKey localMachine = Registry.LocalMachine;
string productsRoot = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products";
RegistryKey products = localMachine.OpenSubKey(productsRoot);
string[] productFolders = products.GetSubKeyNames();
foreach (string p in productFolders)
{
RegistryKey installProperties = products.OpenSubKey(p + @"\InstallProperties");
if (installProperties != null)
{
string displayName = (string)installProperties.GetValue("DisplayName");
if ((displayName != null) && (displayName.Contains(productDisplayName)))
{
string uninstallCommand = (string)installProperties.GetValue("UninstallString");
return uninstallCommand;
}
}
}
return "";
}
注册表里取出的是这样的字符串: MsiExec.exe /X{90120000-0021-0409-0000-0000000FF1CE}
MsiExec.exe的/quiet参数,没有用户参与。
代码来自:
https://sites.google.com/site/msdevnote/home/programmatically-uninstall-programs-with-c
补充:.NET技术 , C#