我正在寻找一种方法来在无线连接到互联网时禁用 Windows 7 上的自动 Windows 更新。
客户端全部连接到 2008 R2 域控制器。
快速进行谷歌搜索,我什么也没找到。
我认为一定有办法实现这一点。
是否有人知道注册表项或一些组策略黑客可以帮助我做到这一点?
谢谢
答案1
也许您可以使用这个快速破解但非常简单的 C# 代码。我建议将其放入自己的“服务”中,该服务将部署(例如通过 GPO)在目标计算机上。
那么代码的作用是什么:它在“NetworkInformation.NetworkAddressChanged”上创建一个事件处理程序,如果网络接口上发生某些变化(例如 WIFI 已停用、IP 地址已更改、笔记本电脑已接入以太网),该事件处理程序始终会触发。然后,它会检查是否至少有一个以太网网络接口已启动:如果已启动,则启动“Windows 更新”服务 - 如果不是,则停止“Windows 更新”服务
namespace WindowsUpdateLANOnly
{
class Program
{
static void Main(string[] args)
{
//NetworkInformation from reference: System.Net.NetworkInformation
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback);
Console.WriteLine("Listening for address changes. Press any key to exit.");
Console.ReadLine();
}
private static void AddressChangedCallback(object sender, EventArgs e)
{
//handle only events from the ethernet network interface
var adapters = NetworkInterface.GetAllNetworkInterfaces().Where(p => p.NetworkInterfaceType == NetworkInterfaceType.Ethernet);
//check if we have at least one ethernet network interface online
bool isOnLAN = false;
foreach (NetworkInterface ethernetNetwork in adapters)
{
Console.WriteLine(" {0} is {1}", ethernetNetwork.Name, ethernetNetwork.OperationalStatus);
if (ethernetNetwork.OperationalStatus == OperationalStatus.Up)
{
isOnLAN = true;
}
}
//deactivate or activate the windows update service
WindowsUpdateService(isOnLAN);
}
private static void WindowsUpdateService(bool start)
{ //ServiceController from reference: System.ServiceProcess
ServiceController sc = new ServiceController("Windows Update");
Console.WriteLine("Try to {0} the windows update service", start?"Activate":"Deactivate");
if (start) //should start
{
if(sc.Status.Equals(ServiceControllerStatus.Stopped) ||
sc.Status.Equals(ServiceControllerStatus.StopPending))
{
sc.Start();
//var timeout = new TimeSpan(0, 0, 5); // 5 seconds
//sc.WaitForStatus(ServiceControllerStatus.Running, timeout);
Console.WriteLine("Windows update service started");
}
}
else //should stop
{
if (sc.Status.Equals(ServiceControllerStatus.Running) ||
sc.Status.Equals(ServiceControllerStatus.StartPending))
{
sc.Stop();
//var timeout = new TimeSpan(0, 0, 5); // 5 seconds
//sc.WaitForStatus(ServiceControllerStatus.Stopped, timeout);
Console.WriteLine("Windows update service stopped");
}
}
}
}
}
你怎么认为?
答案2
不确定效率如何,但您可以编写一个脚本,通过 WLAN 适配器运行并检查网络连接(卡已启用,已获取 IP 地址),然后停止 Windows 更新服务。只是一个想法