如何从C#

时间:2019-02-09 23:17:46

标签: c# x86-64 registrykey

我有.net解决方案,可以在X86(作为目标平台)中生成内部版本。 我期望下面提到的注册表项应在以下目录下创建 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\ FolderName,但是它将在Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node下创建条目,这在此处是不希望的。 如果我将.net解决方案更改为X64(构建目标平台),那么它将在“本地计算机\软件”下创建

Screenshot

Microsoft.Win32.RegistryKey subKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE");
            if (checkIfKeyExists(subKey))
            {
                subKey =  Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\FolderName");
                if (!checkIfKeyExists(subKey))
                {
                    Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\ FolderName ");
                    Microsoft.Win32.Registry.LocalMachine.SetValue("TestKey", "456788", RegistryValueKind.String);
                }
            }

1 个答案:

答案 0 :(得分:2)

32位应用程序将默认为注册表的32位视图。如果要将密钥访问定向到64位视图,则需要手动打开注册表配置单元,而不要使用Registry类成员。

using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
using (var key = hklm.CreateSubKey(@"SOFTWARE\FolderName", writable: true))
{
    // do stuff with the key
    if (key.GetValue("TestKey") == null)
        key.SetValue("TestKey", "456788");
}