2016-08-23 107 views
0

我正在嘗試做一些註冊表編輯。下面的代碼是我的問題的一個MCVE:C#編輯註冊表不起作用

 RegistryKey key; 
     key = Registry.LocalMachine.OpenSubKey("DRIVERS", true); 
     key = key.CreateSubKey("Names"); 
     key.SetValue("Name", "nick", RegistryValueKind.String); 
     key.Close(); 

該代碼工作正常。下面(改變DRIVERSSOFTWARE)不:

 RegistryKey key; 
     key = Registry.LocalMachine.OpenSubKey("SOFTWARE", true); 
     key = key.CreateSubKey("Names"); 
     key.SetValue("Name", "nick", RegistryValueKind.String); 
     key.Close(); 

對我來說,代碼的兩個塊之間的差別是微不足道的。這個問題的原因是什麼,我該如何解決這個問題?我已經以管理員身份運行代碼。

我的最終目標是修改「SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon」文件夾中的值。

我知道這是可能的從Powershell - 它應該可能從C#以及。

+1

嘗試寫入您實際要寫入的密鑰。我懷疑是否有可能污染HKLM的根源。 – Blorgbeard

+0

@Blorgbeard我試過了。這是行不通的。我用我想要寫入的密鑰進行編輯。它是SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon。 – nhouser9

+1

你肯定會混淆兩個不同的問題。寫入該密鑰*實際*要寫入[需要UAC提升](http://stackoverflow.com/questions/2818179/how-do-i-force-my-net-application-to-run-as-管理員)*和*運行程序[作爲64位進程](http://stackoverflow.com/a/2843835/17034)。 –

回答

1

您可以從32位進程寫入64位註冊表,但需要按照以下方式明確請求64位註冊表(在Q中的代碼中進行了修改)。

var hklm = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 
RegistryKey key = hklm.OpenSubKey("SOFTWARE", true); 
key = key.CreateSubKey("Names"); 
key.SetValue("Name", "nick", RegistryValueKind.String); 
key.Close();