2010-04-27 46 views
17

这不是为我工作:C#中注册本地计算机创造价值

public bool createRegistry() 
{ 
    if (!registryExists()) 
    { 
     Microsoft.Win32.Registry.LocalMachine.CreateSubKey("Software\\xelo\\"); 

     Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\xelo").SetValue("hostname", (string)hostname, Microsoft.Win32.RegistryValueKind.String); 


     return true; 
    } 
    else 
    { 
     return updateRegistry(); 
    } 

}

异常错误是无权做的事情。任何帮助,将apreaciated

Exeption:System.UnauthorizedAccessException | "Cannot write to the registry key"

对于工作复读上接受的解决方案

回答

24

非管理员和unelevated admin用户评论无权修改HKEY_LOCAL_MACHINE关键。以管理员身份运行程序。

+4

我是管理员,并以管理员身份运行给我相同的错误 – 2010-04-27 17:22:05

+0

检查在regedit中的密钥的权限。 – Segfault 2010-04-27 17:28:37

+11

尝试将true传递给OpenSubKey调用的第二个参数或使用CreateSubKey的返回值。 http://msdn.microsoft.com/en-us/library/microsoft.win32.registrykey.opensubkey.aspx http://msdn.microsoft.com/en-us/library/ad51f2dx%28v=VS .100%29.aspx – 2010-04-27 17:32:26

0

那么你已经得到了你的答案 - 我猜你正在Vista或Windows 7(或Server 2008)上运行,并且运行该应用程序的进程/用户没有修改注册表的权限/权限。

所以它不是一个代码问题,而是一个系统管理员。构建应用程序并以管理员身份运行,看看是否有效。

+1

甚至与管理员相同的错误 – 2010-04-27 17:23:21

+0

我可以确认以上述代码片段中所建议的方式编程更新带有管理权限的HKEY_LOCAL_MACHINE,并且接受的答案不起作用。 – Cole 2014-12-18 17:00:53

7

即使管理员我不认为你可以从LocalMachine创建新的密钥。请确保你做

Registry.LocalMachine.CreateSubKey(@"SOFTWARE\YourCompanyName\SomeNewKey"); 

,而不是

Registry.LocalMachine.CreateSubKey("SomeNewKey"); 
+0

准确地说,在VS上面运行这段代码,或者进入'/ bin/Debug/App.exe'并以Admin身份运行导致下面的错误: '在mscorlib中发生未处理的异常'System.UnauthorizedAccessException' .dll 其他信息:访问注册表项'HKEY_LOCAL_MACHINE \ SOFTWARE \ YourCompanyName \ SomeNewKey'被拒绝。' – Cole 2014-12-18 16:59:23

+0

@Cole:您可能想发布一个新问题,其中包含特定于您的问题的详细信息。这种写入注册表的方法是可靠的,我已经在商业软件中使用了多年。如果你发布你的代码,我们可以帮你弄清楚为什么你会得到这个异常。我的典型模式是:'RegistryKey rk = Registry.LocalMachine。OpenSubKey(path,true);如果(rk == null){rk = Registry.LocalMachine.CreateSubKey(path);} if(rk!= null){.. do stuff .. rk.Close(); }' – nothingisnecessary 2014-12-18 17:27:49

+1

'string path = @“SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Authentication \ Credential Providers”; 的RegistryKey的RegistryKey = Registry.LocalMachine.OpenSubKey(路径,TRUE);' ,其抛出 '类型的未处理的异常 'System.Security.SecurityException' 出现在mscorlib.dll 附加信息:请求的注册表访问是不允许。' – Cole 2014-12-18 23:52:25

-2

将Premission校验位真...

Microsoft.Win32.Registry.LocalMachine.CreateSubKey("Software\\xelo\\", true); 

:)

+2

Registry.LocalMachine不包含任何重载方法,它允许[ CreateSubKey(String,Bool)](http://msdn.microsoft.com/en-us/library/Microsoft.Win32.RegistryKey.CreateSubKey(v = vs.110).aspx) – WiiMaxx 2014-08-06 06:56:46

6

下面的代码来创建关键注册表。

Microsoft.Win32.RegistryKey key; 
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("Software\\Wow6432Node\\Names"); 
key.SetValue("Name", "Isabella"); 
key.Close(); 
+1

我收到了一个'Additional information:Access运行代码段时,注册表项'HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Names'被拒绝.'错误。请指教。 – Cole 2014-12-18 16:54:54

+0

以管理员身份运行应用程序,它应该工作。 – PandaNL 2015-03-12 14:51:01

相关问题