windows套接字注册表项问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows套接字注册表项问题相关的知识,希望对你有一定的参考价值。

连接不上网络,错误代码为720,诊断为计算机缺少一个或多个网络协议(缺少网络连接需要的windows套接字注册表项)。该如何解决?

参考技术A 1、打开“控制面板”-“添加删除程序”,勾选“显示更新”,将此两个补丁卸载后重起计算机试试。KB893066和KB890923
2、把“C:\WINDOWS\system32\drivers”目录下的“TCPIP.SYS.ORIGINAL”文件改回“TCPIP.SYS”,然后重新启动系统试试,如果没有就到其他机子上拷一个过来。3、将 TCP/IP协议删除然后重启电脑后再安装。4、在设备管理器里将网卡删除,然后重启,再安装网卡驱动。
5、最不愿看到的办法,重装系统。
参考技术B 打开“控制面板”-“添加删除程序”,勾选“显示更新

Windows 不承认通过 .NET 代码更改注册表项

【中文标题】Windows 不承认通过 .NET 代码更改注册表项【英文标题】:Windows not acknowledging changes to registry key via .NET code 【发布时间】:2018-03-10 23:25:07 【问题描述】:

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

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

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

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

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】:

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

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);
    

【讨论】:

以上是关于windows套接字注册表项问题的主要内容,如果未能解决你的问题,请参考以下文章

TcpWindowSize 与 Windows 上的套接字缓冲区大小

在 Windows 下更改默认套接字缓冲区大小 [关闭]

围绕winsock的BSD套接字兼容包装器?

Windows 上是不是有 Unix 域套接字模拟?

基于windows的回声udp服务器端/客户端

Web 套接字项删除约定