Невозможно создать / записать значения в раздел реестра, несмотря на права администратора C # - PullRequest
1 голос
/ 14 июня 2019

В моем консольном приложении я хочу создать значение DWORD и установить его значение 2 для моего раздела реестра в Локальной машине. Обратите внимание, у меня есть права администратора на моей машине.

Ниже приведен мой код, который успешно выполняется, но я не могу увидеть, чтобы какое-либо значение устанавливалось в реестре.

            string keyPathI = @"SOFTWARE\Microsoft\Terminal Server Client";
            string keyPathII = @"SOFTWARE\WOW6432Node\Microsoft\Terminal Server Client";

            RegistryKey keyOne = Registry.LocalMachine.OpenSubKey(keyPathI, true);
            RegistryKey keyTwo = Registry.LocalMachine.OpenSubKey(keyPathII, true);

            if (keyOne != null)
            {
                keyOne.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);

                keyOne.Close();
            }

            if (keyTwo != null)
            {
                keyTwo.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);
                keyTwo.Close();
            }

Вот мой app.manifest

<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />              
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Что еще мне нужно сделать, чтобы записать значения в подраздел реестра?

P.S .: Хотя в Интернете много похожих статей, я отсылал их все, но ни одна из них не помогла мне.

1 Ответ

1 голос
/ 14 июня 2019

Это работает для меня (VS 2015, 32-битное приложение на Windows 64) (тест на 64-битном кусте) =>

using (RegistryKey rkLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64))
{
    using (RegistryKey rk = rkLocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Terminal Server Client", true))
    {
        rk.SetValue("RemoteDesktop_SuppressWhenMinimized", 2, RegistryValueKind.DWord);
    }
}
...