我使用System.Win32编写注册表代码:
RegistryKey startup = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true);
startup.SetValue("hi", "Test");
但是当我打开注册表编辑器时,我不会在\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
中写,而是在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
中写入密钥
答案 0 :(得分:1)
无论你写的是什么密钥。问题是你要么
或
你可以做2种方式
RegistryView.Registry64
/ RegistryView.Registry32
和OpenBaseKey
RegOpenKeyEx
在早期版本中使用Advapi32.dll
/ KEY_WOW64_64KEY
标记KEY_WOW64_32KEY
进行Api调用RegistryView枚举:在64位版本的Windows上,存储了部分注册表 分别用于32位和64位应用程序。有一个32位的视图 对于32位应用程序和64位应用程序的64位视图。
您可以在使用OpenBaseKey时指定注册表视图 OpenRemoteBaseKey(RegistryHive,String,RegistryView)方法,以及 RegistryKey对象上的FromHandle属性。
代码使用Registry64
var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
//var baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
if (baseKey != null)
{
var subKey = baseKey.OpenSubKey("myKey",
RegistryKeyPermissionCheck.ReadWriteSubTree,
RegistryRights.FullControl);
if (subKey != null)
{
subKey.SetValue("hi", "Test");
subKey.Close();
}
baseKey.Close();
}
可以在此处找到使用RegOpenKeyEx
和KEY_WOW64_64KEY
的PInvoke
PInvoke RegOpenKeyEx (advapi32)
其他资源
RegistryKey.OpenBaseKey Method (RegistryHive, RegistryView)
RegistryKey.OpenSubKey Method (String, RegistryKeyPermissionCheck, RegistryRights)