我正在尝试访问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();


                                }

                        }



                }


亲切的问候!

最佳答案

使用注册表时,我遇到了类似的问题,我怀疑您是“ 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设置为以管理员身份运行。

关于c# - C#上的Registry和Wow6432Node,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34405644/

10-13 00:29