我正在尝试访问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/