2015-12-21 141 views
1

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

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(); 


           } 

         } 



       } 

亲切的问候!

+0

>但它仍然没有工作。<这是不够的信息。 –

+0

@LynnCrumbling,我的意思是说,注册表上的值仍然没有变化。但我没有得到任何例外。 – ctabuyo

+0

您是否在Project Build设置中打开了“首选32位”?如果是这样,那么你的过程将是一个32位的过程。 –

回答

3

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

在具有用户帐户控制(UAC)的计算机上,您没有严格拒绝写入注册表的权限,但是调用得到虚拟化。看看你预计看到的价值是否在HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\

解决方法是将add an application manifest file添加到解决方案中,并设置requestedExecutionLevel level="requireAdministrator",这意味着无论何时在具有UAC的计算机上运行应用程序,它都会询问“Are you sure?”。您还需要确保项目属性指定要使用的清单。

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

+0

这是辉煌的先生!修好了,谢谢你。我欠你一个队友! ;-) – ctabuyo

+0

很高兴帮助! – Ian