C#上的注册表和Wow6432Node

时间:2015-12-21 22:46:48

标签: c# .net registry

我正在尝试访问Wow6432Node内的注册表中的路径,在其中写入一个值,但它无法正常工作。我试过不同的代码,但它仍然无法正常工作。我在x64位Windows 10上运行它作为“任何CPU”。我怀疑它与x86和x64之间的注册表差异有关。我错了吗?

if (rv3.Checked == true)
                {

                    string line2 = File.ReadLines(AppDomain.CurrentDomain.BaseDirectory + "simulators.txt").Skip(3).Take(1).First();
                    MessageBox.Show(line2);
                    if (System.IO.Directory.Exists(line2))
                        {
                        var baseReg = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
                        var Key = baseReg.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Microsoft Games\flight simulator\10.0\");
                        if (Key != null)
                        {
                            RegistryKey key2 = baseReg.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Microsoft Games\flight simulator\10.0\");



                            key2.SetValue("SetupPath", line2);
                            key2.Close();


                                }

                        }



                }

亲切的问候!

1 个答案:

答案 0 :(得分:3)

我在使用注册表时遇到了类似的问题,我怀疑你是“virtualization”的受害者。

在具有用户帐户控制(UAC)的计算机上,您不会被严格拒绝写入注册表的权限,但调用将被虚拟化。查看您希望看到的值是否在HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\处出现。

解决方案的解决方案是add an application manifest file,并设置requestedExecutionLevel level="requireAdministrator",这意味着每当您在使用UAC的计算机上运行应用程序时,它都会询问“您确定吗?”。您还需要确保项目属性指定要使用的清单。

然后我遇到了第二个问题,即当您通过Visual Studio进行调试时,它将以VS执行级别运行,而不是在清单(see here)中指定的级别。最简单的解决方案是将VS设置为在快捷方式属性中以管理员身份运行。