C#假装改变注册表?

时间:2015-03-26 21:46:52

标签: c# windows registry

让我先说明我不知道发生了什么。我只想将注册表项从localhost更改为127.0.0.1。我写了一些C#来快速更改它似乎工作,除了我刷新regedit来查看更改。

try {   
     var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE");
     key = key.OpenSubKey(@"ServOr", true);

     //SHOWS localhost
     MessageBox.Show(key.GetValue(@"HOST").ToString());
     key.SetValue(@"HOST", @"127.0.0.1", RegistryValueKind.String);

     //SHOWS 127.0.0.1
     MessageBox.Show(key.GetValue(@"HOST").ToString());

     key.Close();
     //Regedit still shows localhost
} catch (Exception exception) {
     MessageBox.Show(exception.ToString());
}

如果你再次运行它,那么特别奇怪的部分是,虽然注册表仍然有127.0.0.1,但两个Messagebox都会显示localhost。 Visual Studio以管理员权限运行。注册表允许完全控制管理员。

1 个答案:

答案 0 :(得分:1)

在64位Windows中运行32位进程时,Windows将从程序中隐藏64位注册表和Program Files目录(以及其他内容)。当32位程序访问注册表时,它将在Wow6432Node路径中显示它的注册表子集。

因此,您的密钥位于HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ServOr

结帐http://en.wikipedia.org/wiki/WoW64this post on MSDN