c# - 无法写入 HKEY_LOCAL_MACHINE\Software 下的注册表

标签 c# winapi registry uac

我正在编写一个应用程序,它需要创建一个从登录屏幕和控制面板用户小程序中隐藏的特殊用户帐户。通过将用户名的 DWORD 值写入下面的注册表项,我能够实现此目标:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

问题是在启用了 UAC 的 Windows 7 下,无论我尝试什么,我都无法以编程方式将值写入上面的键。

据我了解,在启用了 UAC 的 Windows 7 上,写入某些键是不允许的,除非您以管理权限运行。我添加了一个应用程序 list requestedExecutionLevel level="requireAdministrator"uiAccess="false",我在程序运行时接受了UAC提示,我的帐户是Administrators的成员,但我仍然无法写入上述注册表项。

我还需要做什么?在任何应用程序配置中,如何在 HKEY_LOCAL_MACHINE\SOFTWARE 下写入键和值?

更多信息...当我的程序运行时,没有抛出任何错误并且它似乎写入了值。我的猜测是 Windows 正在虚拟化我正在写入的位置。如果我要隐藏这个特殊用户帐户,我需要写到实际位置,而不是虚拟位置。

最佳答案

可能该程序在 64 位操作系统上作为 32 位程序运行?在这种情况下,我建议您搜索在 HKEY_LOCAL_MACHINE\SOFTWAREWow6432Node 子项下创建的值。

您可以阅读有关此类虚拟化的更多信息 here .您可以使用 KEY_WOW64_32KEY flag在一些 API 中能够在没有虚拟化的情况下使用完整的注册表。

关于c# - 无法写入 HKEY_LOCAL_MACHINE\Software 下的注册表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950371/

相关文章:

delphi - 在 Delphi 上获取 IE 版本 - 注册表解决方案不起作用

c# - MongoDB C# 2.0 驱动程序多次展开

c# - 时间截取(员工夜间工作时间)- VB.net、C#、伪代码

c++ - 如何获取被覆盖窗口的像素?

c# - 如何实现与 WNetAddConnection2 相同的超时?

c++ - Windows 10 中的注册表权限

c# - 无法在 c# 控制台应用程序中运行 hello world 程序

c# - 带有附加列的sql批量插入

c++ - VS 启动程序时 WriteFile 行为不同

windows - 如何使 Windows 安装程序更新注册表字符串值(不是多字符串)中的列表?