【问题标题】:Disable Windows Update during long running processes在长时间运行的进程中禁用 Windows 更新
【发布时间】:2015-04-18 01:31:44
【问题描述】:

有时我必须在我的一台 Windows Server 2012 服务器上运行长时间运行的进程。这些过程有时可以运行一个多星期。 Windows 更新在必须重新启动时终止此过程。

我正在寻找一种在其中一个进程正在运行时以编程方式停止 Windows 更新服务并在该进程完成后重新启用 Windows 更新的方法。 (而不仅仅是在服务器上禁用 Windows 更新)。

我对可能的方法有 2 个想法:

1) 使用ServiceController class

2) 从我的程序中调用 PowerShell 命令。

我不确定最佳解决方案是什么。或者如果我没有看到更好的选择。

【问题讨论】:

  • 我不是 Windows 服务器方面的专家。但是,通过防火墙阻止对 windows 更新服务器的访问呢?
  • 服务器上的 Windows 更新不应自动重新启动它。至少我从未见过这种行为。您应该查看是否有任何计划任务来重新启动服务器并禁用它们而不是 Windows 更新。但是,这不会阻止用户(用户是指具有权限的人)登录并手动重新启动/触发 Windows 更新重新启动。
  • @Pheonyx 通常,Windows 更新并可能重新启动该服务器没有问题,所以这是目前的配置。我只是在寻找一种在执行长时间运行的进程时停止这种行为的方法。我不想完全禁用更新,但我愿意接受你们建议的任何其他选项。
  • @BerndGit 我不想在其中一个进程正在运行时永久禁用 Windows 更新(有时我不必运行它们数周)
  • @Pheonyx:IIRC,在我们的 Windows Server 2008 R2 上,默认行为确实是 reboot automatically。

标签: c# windows powershell


【解决方案1】:

2 年前我不得不实现这样的功能。

方法是通过 Windows 注册表。

您必须编辑注册表值。

我确实记得 Microsoft 文档并未公开所有功能, 一些错误,他们改变了 Windows 版本之间的一些东西。

*为了应用该行为,他们编辑一些值并有时添加/删除一些(在某些操作系统上,您还需要重新启动 WUA)。

这个link(在自动更新配置段落中)包含有关注册表值的更多信息。

为了解决我使用 Windows 更新代理遇到的问题,当我使用 Procmon 监控 WUA 时

这就是我发现大部分问题的方式。

与注册表交互:

        using (var hive = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,RegistryView.Default))
        using (var key = hive.OpenSubKey(@"put the key there (in most of the operation systems the key is not where microsoft documented)",true))
        {
            //do your logic
        }

我不能给你更多信息,因为那将违反 NDA....

提示:完成后,我建议您使用 API 强制 WUA

【讨论】:

  • @mmilan 我忘了在我的回答中说,如果你的组织有 WSUS,你可以通过他的 API 进行配置,你的生活会更轻松
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多