Windows 10 2018年5月更新后网络路径程序创建Socket报10022错误求助
解决Windows 10 2018年5月更新后网络路径程序创建Socket报错10022的问题
你碰到的这个问题是Windows 10 1803版本(2018年5月更新)的安全策略调整导致的——系统默认收紧了从网络共享路径运行程序的权限,限制了这类程序执行Socket创建这类网络相关操作,目的是降低恶意程序通过网络共享传播后发起攻击的风险。而本地磁盘运行不受限,是因为系统默认认为本地路径的程序可信度更高。
针对这个问题,给你几个可行的解决思路:
1. 将网络共享路径映射为本地驱动器
把你的网络共享路径(比如\\server\share)映射成一个本地盘符(比如Z:),之后从这个映射盘符启动程序。系统会把映射驱动器上的程序当作本地路径程序处理,就能绕过网络路径的权限限制,Socket创建操作也能正常执行了。
2. 调整Internet Explorer安全区域设置
网络共享路径默认被归类到“本地Intranet”安全区域,1803更新后该区域的权限被收紧。你可以这样调整:
- 打开Internet Explorer(即便你日常不用IE,系统的安全区域设置依然依赖它)
- 点击右上角齿轮图标→选择“Internet选项”
- 切换到“安全”标签页,选中“本地Intranet”,点击“自定义级别”
- 在弹出的设置窗口中,找到“运行未标记为安全的ActiveX控件和插件”或“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”,设置为“启用”或者“提示”(选提示的话,运行程序时会弹出确认框,点击允许即可)
- 点击确定保存设置,重启程序尝试
3. 修改组策略(适用于专业版/企业版系统)
如果你的Windows是专业版或企业版,可以通过组策略解除网络路径程序的Socket限制:
- 按下Win+R,输入
gpedit.msc打开组策略编辑器 - 依次展开:计算机配置→Windows设置→安全设置→本地策略→安全选项
- 找到“网络访问:本地账户的共享和安全模型”,将其设置为“经典 - 本地用户以自己的身份验证”
- 另外,还可以在计算机配置→管理模板→Windows组件→Internet Explorer→Internet控制面板→安全页面里,调整本地Intranet区域的安全级别,降低对网络程序的限制
- 完成设置后,重启电脑生效
4. 为程序添加数字签名
如果是你自己开发的程序,给它添加有效的数字签名(测试阶段可以用自签名证书,正式环境建议使用CA颁发的证书)。系统会信任已签名的程序,允许它在网络路径上执行Socket这类操作。
附你提供的测试代码:
基础Socket创建代码:
Socket s; s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
按钮点击测试代码:
private void button1_Click(object sender, EventArgs e) { Socket s; try { s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } catch (Exception error) { MessageBox.Show("Error : " + error.Message); return; } MessageBox.Show("Oke"); }
内容的提问来源于stack exchange,提问作者Peter v.d. Vos
相关产品推荐
相关产品推荐

