2015-11-05 80 views
-1

我想在Windows 7 x64注册表进行更改。我已经有了用于更改32位系统注册表项的代码,其中一些也适用于64位版本。但是其中有些人不知道,我知道它与WOW64node有关,但我无法让它工作。注册表编辑64位Windows 7与.NET

现有代码:

regkey = My.Computer.Registry.CurrentUser.OpenSubKey("Control Panel\International", True)  
regkey.SetValue("sDecimal", ",") 
regkey.Close() 

这适用于Windows 7 32位芽未在64位。所以,我试过如下:

rk1 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64) 
rk2 = rk1.OpenSubKey("Control Panel\International", True) 
rk2.SetValue("sDecimal", ",") 
regkey.Close() 

这不工作,我想这是因为没有使用WOW64node的。但是,当我在代码中对它进行实验时,它无法运行。

这段代码确实在64位足够有趣的工作:

regkey = My.Computer.Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion\Winlogon", True)  
regkey.SetValue("Shell", "C:\mmi_loader.exe", RegistryValueKind.String) 
regkey.Close() 

我到底做错了什么?如果代码可以适应32位和64位两种方式,那将是理想的选择。

由于提前,

回答

0

此代码对我的windows10 64位PC的工作原理:

RegistryKey rk1 = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); 
RegistryKey rk2 = rk1.OpenSubKey("Control Panel\\International", true); 
rk2.SetValue("sDecimal", ","); 
rk1.Close(); 
rk2.Close(); 
+0

这个代码确实工作。我将它嵌入到WIX build MSI安装程序中,然后它不起作用。 –

+0

即使我的旧代码在安装程序没有运行时也能正常工作,所以问题不在于脚本本身。 –