无法写入注册表项

620*_*2SP 32 c#

当我试图在注册表中保存我的密钥时,我收到错误无法写入注册表项.

//这是我的代码

注意:我尝试以管理员身份运行,假设某些权限问题仍然出现同样的错误....

private const string RegistryKeyName = "Skms";
private readonly RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("SOFTWARE");

public KeyManagementRegistryKeyChangeImpl(bool writeable)
    {
        this.writable = writeable;
        RegistryKey skms; 
        if (Environment.Is64BitOperatingSystem == true) 
        {
            skms = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey(RegistryKeyName,true);

        }
        else
        {
            skms = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32);
        }

        if (null == skms)
        {
            skms = SoftwareKey.CreateSubKey(RegistryKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree);
        }

        if(skms == null)
        {
            throw new System.ArgumentException(string.Format(CultureInfo.InvariantCulture, 
                @"Registry Key 'HKEY_LOCAL_MACHINE\SOFTWARE\{0}' not found or created",
                RegistryKeyName));
        }

        Decryptor decryptor = Decryptor.Create();
Run Code Online (Sandbox Code Playgroud)

Edw*_*ing 83

试试这个:

RegistryKey skms = SoftwareKey.OpenSubKey(RegistryKeyName, true);
Run Code Online (Sandbox Code Playgroud)

如果您需要对密钥的写访问权,则应将第二个参数设置为true.

-编辑-

在64位系统上,您可以尝试此操作(如果您使用的是.Net 4):

private readonly RegistryKey SoftwareKey = 
    RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
    OpenSubKey("SOFTWARE");
Run Code Online (Sandbox Code Playgroud)

  • @EdwindeKoning你肯定解决了我的问题.谁会想到会有一个真正的参数,所以我可以写 (2认同)

620*_*2SP 17

if (null == skms)            
{             
   skms = Registry.LocalMachine.OpenSubKey("SOFTWARE",true);              
   RegistryKey key = skms.CreateSubKey(
          RegistryKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree);      
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题的答案.

  • 请问为什么`null`是你的compiration中的第一个值?有什么意义吗? (3认同)
  • 这根本不是你问题的答案. (3认同)

Dav*_*nan 7

您可能会违反注册表重定向.也许你在64位系统上有一个32位进程,写入HKLM\Software会被重定向到HKLM\Software\Wow6432Node.

您需要直接打开64位密钥,或者为AnyCPU编译.