Registry OpenSubkey returns null,尽管它在那里
Registry OpenSubkey returns null, although it is there
我已经阅读了该主题的几乎所有其他问题,但它们通常是通过在注册表中使用错误的体系结构视图来解决的。
我正在尝试打开“...\Outlook\Addins”中的一个子项。我有可用于两种架构的子项("HKLM\Software... " 和 "HKLM\Software\Wow3264Node..."
).但我通过测试知道,代码在 "WOW6432Node".
下查找
这是代码片段。
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default);
var reg = hklm.OpenSubKey(@"Software\Microsoft\Office\Outlook\Addins\MyAddin", false);
我也试过了
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry32);
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64);
调试它并查找可见的子项,这些子项为我提供了所有其他条目(甚至是新创建的条目),但不是我正在寻找的那个。
我还检查了注册表权限,这与我看到的其他权限相同。
那么为什么我总是收到 "reg" 的空值?
编辑:也许我应该补充一点,我正在从插件内部寻找该密钥。从简短的测试控制台应用程序尝试时,我在调用
时看到了子项
reg.GetSubKeyNames();
尝试改变这个
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default);
至此
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64);
当您在 64 位 OS 上 运行 一个 32 位应用程序时,它会尝试自动找到 Wow6432Node
。
另一种解决方法可能是为 x64 架构编译它。
有关 RegistryView 枚举的更多信息,请访问 MSDN。
注意这一行;
If you request a 64-bit view on a 32-bit operating system, the returned keys will be in the 32-bit view.
所以您始终请求 64 位密钥应该是安全的。
看起来,这是一个证券"feature"。无法访问正在寻找它的插件的注册表分支。
我想存储在那里的信息需要存储在其他地方。
这让我苦恼了大约 4 个小时,直到我意识到我忘记取消选中“项目”>“软件属性”下的 "Prefer 32-bit"...
我已经阅读了该主题的几乎所有其他问题,但它们通常是通过在注册表中使用错误的体系结构视图来解决的。
我正在尝试打开“...\Outlook\Addins”中的一个子项。我有可用于两种架构的子项("HKLM\Software... " 和 "HKLM\Software\Wow3264Node..." ).但我通过测试知道,代码在 "WOW6432Node".
下查找这是代码片段。
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default);
var reg = hklm.OpenSubKey(@"Software\Microsoft\Office\Outlook\Addins\MyAddin", false);
我也试过了
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry32);
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64);
调试它并查找可见的子项,这些子项为我提供了所有其他条目(甚至是新创建的条目),但不是我正在寻找的那个。
我还检查了注册表权限,这与我看到的其他权限相同。
那么为什么我总是收到 "reg" 的空值?
编辑:也许我应该补充一点,我正在从插件内部寻找该密钥。从简短的测试控制台应用程序尝试时,我在调用
时看到了子项reg.GetSubKeyNames();
尝试改变这个
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Default);
至此
var hklm = RegistryKey.OpenBaseKey RegistryHive.LocalMachine,RegistryView.Registry64);
当您在 64 位 OS 上 运行 一个 32 位应用程序时,它会尝试自动找到 Wow6432Node
。
另一种解决方法可能是为 x64 架构编译它。
有关 RegistryView 枚举的更多信息,请访问 MSDN。 注意这一行;
If you request a 64-bit view on a 32-bit operating system, the returned keys will be in the 32-bit view.
所以您始终请求 64 位密钥应该是安全的。
看起来,这是一个证券"feature"。无法访问正在寻找它的插件的注册表分支。 我想存储在那里的信息需要存储在其他地方。
这让我苦恼了大约 4 个小时,直到我意识到我忘记取消选中“项目”>“软件属性”下的 "Prefer 32-bit"...