You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用OpenRemoteBaseKey访问远程注册表提示“找不到网络名称”

解决方案

1. 确认目标机器的Remote Registry服务已启用

服务器环境下该服务默认通常未开启,必须启动才能支持远程注册表访问:

# 远程配置并启动服务(需管理员权限)
sc \\{machineName} config RemoteRegistry start= auto
sc \\{machineName} start RemoteRegistry

2. 修正NetworkConnection的路径格式

你代码中的共享路径存在格式错误:C#的@符号会将双反斜杠解析为单个反斜杠,正确的共享路径应该是@"\\{machineName}\admin$"。原代码拼接后实际传递的路径缺少一层转义,导致底层无法识别,修正后的代码如下:

using (new NetworkConnection(@"\\{machineName}\admin$", new NetworkCredential(@"mydomain\myaccount", "mypassword")))
{
    var remotereg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName, RegistryView.Default);
}

同时要确保你的NetworkConnection类正确封装了WNetAddConnection2系统API,若类实现存在问题,也会触发“网络名称找不到”的异常。

3. 绕过UAC远程访问限制

服务器的UAC远程管控更严格,需在目标机器修改注册表解除限制:

  1. 打开目标机器的注册表编辑器,定位到HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  2. 新建DWORD值LocalAccountTokenFilterPolicy,设置值为1
  3. 重启目标机器使设置生效

4. 改用身份模拟替代NetworkConnection

放弃NetworkConnection,通过Windows身份模拟直接访问远程注册表:

using (var impersonation = new Impersonation(@"mydomain\myaccount", "mypassword"))
{
    var remotereg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName, RegistryView.Default);
}

Impersonation类需自行封装LogonUser系统API实现身份模拟,确保在模拟上下文内执行远程注册表操作。

5. 检查防火墙规则

服务器防火墙可能拦截了远程注册表的通信端口(默认包括135、445及动态RPC端口),可临时关闭防火墙测试,确认问题后添加远程注册表的入站允许规则。


内容的提问来源于stack exchange,提问作者KenD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:05:21