2012-08-03 71 views
0

它应该是这么简单。这段代码看起来不错。它不会崩溃。那为什么它不按照它所说的去做?我不能改变注册表中的任何东西,但所有谷歌搜索都说这应该是。任何帮助是极大的赞赏。更改win 7与c注册表#

private void button2_Click(object sender, EventArgs e) 
    { 
     RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\",true); 
     myKey.SetValue("AutoAdminLogon", "1"); 

    } 
+4

你是在64位机器上吗? – 2012-08-03 00:49:12

+0

是的,我是........ – Jon 2012-08-03 00:57:59

回答

1

你可能会涉及Win7的“影子注册表”的问题,其中一些注册表更改不是“实际”注册表所做的,而是一个“影子”拷贝保护原来在的恶意访问的事件。注册表更改将重定向到注册表的用户特定区域,但会呈现为显示为与HKLM中相似(如您的示例中所示)。

注册表虚拟化是在Vista中引入的,我相信,但它至少可以很好地解释您的问题。

http://msdn.microsoft.com/en-us/library/bb530198.aspx 如果失败了,您可能正在对注册表的Wow64节点进行更改。在HKLM \ Software \ Wow6432Node \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon下检查您所做的更改,看看您的更改是否在此处进行。在64位版本的Windows上,32位代码在WOW子系统下运行,并且来自这些应用程序的注册表调用被路由到注册表中的Wow6432节点 - 所有这些对于调用的32位应用程序而言都不知道。

+0

关键在于程序运行时提升(以管理员身份),然后注册表项更改将按预期工作(注册表虚拟化不会在提升下发生)。它在您链接的文章中提到。 – 2012-08-03 01:34:30

+0

谢谢,我会看看那个,但是,下面的代码行工作在PowerShell脚本 的Set-ItemProperty “HKLM:\ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \ Winlogon中” -name AutoAdminLogon - 值0 – Jon 2012-08-03 01:49:44

+0

因为我相信Powershell脚本必须在海拔下运行。 – 2012-08-03 01:53:39