代码之家  ›  专栏  ›  技术社区  ›  oscilatingcretin

Windows未通过确认对注册表项的更改。网络代码

  •  0
  • oscilatingcretin  · 技术社区  · 8 年前

    我正在尝试使用更改Windows 7代理设置。净额。通过在注册表编辑器中通过F5刷新注册表项本身,我验证了以下代码成功设置了注册表项,但当我通过控制面板打开Internet设置时,Windows似乎没有确认更改。

    然而,当我通过控制面板手动进行更改时,设置会立即生效。

    这告诉我,控制面板UI以某种方式告诉Windows重新加载键值,而直接通过。NET代码只设置值,不需要重新加载。

    是否可以通过向Windows发出命令。NET代码强制它重新加载任何注册表更改?

    using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64))
    using (var myKey = hklm.OpenSubKey(@"[..]\Software\Microsoft\Windows\CurrentVersion\Internet Settings", true))
    {
        if (myKey != null)
        {
            myKey.SetValue("ProxyServer", "00.00.00.00:0000", RegistryValueKind.String);
            myKey.SetValue("ProxyEnable", 1, RegistryValueKind.DWord);
        }
    }
    

    更新时间: 我刚刚发现,通过控制面板重新打开Internet属性会强制刷新。虽然这不是一个站得住脚的解决方案,但它确实确认向Windows发出了一些命令,要求它重新加载注册表更改。

    1 回复  |  直到 8 年前
        1
  •  0
  •   oscilatingcretin    8 年前

    所以,在问我的问题时,我给了自己更多的搜索标准的想法,这最终让我找到了这篇文章,其中有人试图做与我现在完全相同的事情:

    https://social.technet.microsoft.com/Forums/windowsserver/en-US/7a3011ae-6bea-46e7-80c8-e9bcb93a8cf9/how-can-i-update-the-registry-with-powershell-without-logging-offrebooting?forum=winserverpowershell

    它是Powershell,但我将其转换为c#。呼叫后 InternetSetOption ,这些更改会立即反映出来。

    [DllImport("wininet.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    
    const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
    const int INTERNET_OPTION_REFRESH = 37;
    
    using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.Users, RegistryView.Registry64))
    using (var myKey = hklm.OpenSubKey(@"[..]\Software\Microsoft\Windows\CurrentVersion\Internet Settings", true))
    {
        if (myKey != null)
        {
            myKey.SetValue("ProxyServer", "00.00.00.00:0000", RegistryValueKind.String);
            myKey.SetValue("ProxyEnable", 1, RegistryValueKind.DWord);
    
            InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
        }
    }
    
    推荐文章