我在这里有点疯狂。我试图读取我手动创建的注册表字符串值的值,每次返回null。如果我尝试读取现有注册表字符串值的值,它返回值就好了。以下是我使用的代码:
ManagementBaseObject rinParams = registry.GetMethodParameters("GetStringValue");
rinParams["hDefKey"] = HKEY_LOCAL_MACHINE;
rinParams["sSubKeyName"] = @"SOFTWARE\Microsoft\.NetFramework";
// rinParams["sValueName"] = "InstallRoot";
rinParams["sValueName"] = "test";
ManagementBaseObject routParams = registry.InvokeMethod("GetStringValue", rinParams, null);
if (routParams.Properties["sValue"].Value != null)
{
routput = routParams.Properties["sValue"].Value.ToString();
}
我所做的是设置代码以使用上面的代码来读取" InstallRoot"的值。在注册表HKEY_LOCAL_Machine \ SOFTWARE \ Microsoft.NetFramework \ InstallRoot中,这是一个REG_SZ值。我得到一个成功的读取,目录路径返回正常。然后我创建了另一个REG_SZ变量名称" test"在相同的.NetFramework键中,注释掉了" sValueName" =" InstallRoot"并将其替换为" sValueName" ="测试"。当我在调试器下运行此代码时,我得到返回值null。
我尝试在SOFTWARE下添加密钥,并在该密钥中输入值,例如SOFTWARE \ Testkey,每次都得到相同的结果。它不会让我读取我创建的键,它总是返回null,但似乎我可以读取已经存在的任何键。我不明白为什么我会得到这个结果。
仅供参考,我正在从Windows 7 PC进行远程注册表读取。我的最终目标是能够添加注册表项和值。我试图这样做,我总是得到一个错误异常" Not Found"当我尝试这样的时候,所以我试图找到最简单的东西,即阅读密钥,即使这样做也没有用。对于这里可能会发生什么的任何想法?
这就是我与Windows 2008r2服务器进行远程连接以读取注册表的方式:
ConnectionOptions connectoptions = new ConnectionOptions();
connectoptions.Impersonation = ImpersonationLevel.Impersonate;
connectoptions.Authentication = AuthenticationLevel.PacketPrivacy;
connectoptions.Username = "administrator";
connectoptions.Password = **password redacted**
ManagementScope scope = new ManagementScope(@"\\" + systemIP + @"\root\default");
scope.Options = connectoptions;
ManagementClass registry = new ManagementClass(scope, new ManagementPath("StdRegProv"), null);