即使我尝试同时在x64和x32注册表中打开,也无法打开注册表子项。我正在尝试获取已登录的Visual Studio用户的用户名。
@"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache"
看不到IdeUser,但是Cache返回NULL。
const string SubKey = @"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache";
const string EmailAddressKeyName = "EmailAddress";
const string UserNameKeyName = "DisplayName";
RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(SubKey, false);
if (reg64 != null)
{
return reg64.GetValue(SubKey, true).ToString();
}
//Check the 32-bit registry for "HKEY_LOCAL_MACHINE\SOFTWARE" if not found in the 64-bit registry:
RegistryKey localMachineRegistry32 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);
RegistryKey reg32 = localMachineRegistry32.OpenSubKey(SubKey, false);
if (reg32 != null)
{
return reg32.GetValue(SubKey, true).ToString();
}
我已经对您的代码进行了测试,并且可以正常工作(一定程度上)。我可以访问SubKey。*注意,我以管理员身份运行VS。(右键单击VS exe并以admin身份运行,我也是我的dev计算机的本地管理员,因此我具有不受限制的注册表访问权限)。
但是,您的代码有点有趣,因为您实际上没有通过调用来访问注册表中的值GetValue(SubKey,true)
,在我的示例中,我进行了相应的更改。
const string SubKey = @"Software\Microsoft\VisualStudio\12.0\ConnectedUser\IdeUser\Cache";
const string EmailAddressKeyName = "EmailAddress";
const string UserNameKeyName = "DisplayName";
RegistryKey localMachineRegistry64 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
RegistryKey reg64 = localMachineRegistry64.OpenSubKey(SubKey, false);
if (reg64 != null)
{
//******** This is just an example of getting the user name and email.
//get user name and email from the selected sub key.
var userName = reg64.GetValue(UserNameKeyName, String.Empty).ToString();
var emailAddress = reg64.GetValue(EmailAddressKeyName, String.Empty).ToString();
//return a bool and pass back the userName and email as out parms?
return true;
}
希望这可以帮助。
编辑 -
如果注册表访问仍然是一个问题,则可以通过sysinternals的ProcMon监视注册表访问。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句