如何在不重新启动的情况下卸载程序
本文关键字:情况下 卸载 程序 重新启动 | 更新日期: 2023-09-27 18:29:44
我编写了一个程序,使用C#中的ManagementObject自动卸载许多程序。它工作正常,除了一些程序自动重新启动计算机,这违背了我的程序的目的。有没有什么方法可以让它等到一切都完成卸载后再重新启动?
以下是实际卸载程序的方法:
static void UninstallProduct(string path)
{
ManagementObject product = new ManagementObject(path);
if ((product != null) && (product.Path.ClassName == "Win32_Product"))
{
Console.WriteLine(
"Uninstalling: "
+ product.GetPropertyValue("Name")
+ "...");
object result = product.InvokeMethod("Uninstall", null);
Console.WriteLine(
"The Uninstall method result is {0}",
result.ToString());
}
}
尝试使用REMOVE=ALL
和REBOOT=ReallySuppress
选项调用MSI(安装程序包)。
如果产品使用自定义安装程序而不是MSI,则可能没有跳过重新启动的选项。在这种情况下,我会联系开发人员,指出未经管理员同意重新启动计算机可能构成拒绝服务攻击:干扰计算设备的运行,故意阻碍或延迟电子通信,这是州和联邦的犯罪行为。如果你是在"帮助他们逃避责任",而不是用法律和起诉的威胁来打击他们,你可能会得到想要的行为改变(至少在未来的版本中)。
请参阅.NET不会用命令行args调用方法来理解为什么REBOOT=ReallySuppress可能不会在您认为的情况下传递给MSI卸载程序。对我来说,在卸载过程中强制不重新启动的方法是在调用MSI卸载方法之前终止您希望卸载的应用程序的所有进程。当然,这种变通方法并不是万无一失的,它取决于正在卸载的程序。