2015-11-05 82 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

即使我的舊代碼在安裝程序沒有運行時也能正常工作,所以問題不在於腳本本身。 –