如何在不重新启动的情况下卸载程序



我编写了一个程序,使用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=ALLREBOOT=ReallySuppress选项调用MSI(安装程序包)。

如果产品使用自定义安装程序而不是MSI,则可能没有跳过重新启动的选项。在这种情况下,我会联系开发人员,指出未经管理员同意重新启动计算机可能构成拒绝服务攻击:干扰计算设备的运行,故意阻碍或延迟电子通信,这是州和联邦的犯罪行为。如果你是在"帮助他们逃避责任",而不是用法律和起诉的威胁来打击他们,你可能会得到想要的行为改变(至少在未来的版本中)。

请参阅.NET不会用命令行args调用方法来理解为什么REBOOT=ReallySuppress可能不会在您认为的情况下传递给MSI卸载程序。对我来说,在卸载过程中强制不重新启动的方法是在调用MSI卸载方法之前终止您希望卸载的应用程序的所有进程。当然,这种变通方法并不是万无一失的,它取决于正在卸载的程序。

最新更新