尽管具有管理员权限C#

时间:2019-06-14 10:02:25

标签: c# .net registry uac registrykey

在我的控制台应用程序中,我想创建一个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 个答案:

答案 0 :(得分:1)

这对我有用(VS 2015,Windows 64上的32位应用程序)(在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);
    }
}