3

我使用 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());
  }
}
4

2 回答 2

5

尝试使用REMOVE=ALLREBOOT=ReallySuppress选项调用 MSI(安装程序包)。

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

于 2013-08-30T16:08:26.260 回答
1

请参阅.NET 不会使用命令行参数调用方法,以了解为什么 REBOOT=ReallySuppress 可能不会在您认为的情况下传递给 MSI 卸载程序。在卸载期间强制不重新启动对我有用的是在调用 MSI 卸载方法之前终止您希望卸载的应用程序的所有进程。当然,该解决方法并非万无一失,并且取决于正在卸载的程序。

于 2013-12-12T06:20:24.383 回答