我正在尝试访问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();
}
}
}
亲切的问候!
答案 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设置为在快捷方式属性中以管理员身份运行。