2

我正在编写一个 C# 应用程序,它将修复整个组织中损坏的注册表项。我正在尝试使用 RegistryKey、RegistrySecurity 和 RegistryAccessRule 这三个类,当我尝试使用它们时,我得到一个“不允许请求的注册表访问。”。我对此进行了广泛的搜索,但找不到好的解决方案。

我正在尝试修复的密钥,对它们没有权限(请参见下面的屏幕截图)。它们是空白的并且没有可继承的设置。这不允许我使用我的应用程序修复它们,因为我没有权限,但我可以使用运行此应用程序的用户更改权限,就像我打开 regedit 一样。所以我知道我可以通过手动方式向这个用户添加对损坏机器的权限,但由于某种原因,我的应用程序无论我多么努力地告诉它提升自己都无法获得权限。

我尝试过的事情:

  1. 在 Windows 7 上,当您使用 UAC 运行应用程序时,它可以工作,右键单击以管理员身份运行。我想复制能够在 Windows XP 上使用相同的代码执行此操作。
  2. 我使用“highestAvailable”级别创建了一个清单,并尝试了“requireAdministrator”。
  3. 我也尝试过使用“System.Security.Permissions.RegistryPermission”断言,这显然也会带来更高级别的运行权限。
  4. 我没有从网络共享运行它,尽管我已经尝试了本地和网络来查看它将从哪个安全区域运行。

您可以看到权限如下所示:http: //i.stack.imgur.com/0c99s.jpg

任何帮助表示赞赏!

4

1 回答 1

0

您可以尝试从代码中模拟管理员帐户,使用 P/Invoke 调用必要的 api,就像此人创建帐户模拟类一样:

模仿者类 c#

于 2012-09-18T22:31:05.820 回答