我正在编写一个应用程序,它需要创建一个隐藏在登录屏幕和Control用户applet中的特殊用户帐户。通过将用户名为0的DWORD
值写入下面的注册表项,我能够完成这个目标:
NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
问题是,在带UAC的Windows 7下,无论我尝试什么,我都不能以编程方式将值写入上面的键。
据我理解,在Windows 7上,除非您是以管理权限运行,否则在打开UAC的Windows 7上不允许写入某些密钥。我已经添加了一个应用程序清单requestedExecutionLevel level="requireAdministrator" uiAccess="false"
,当我的程序运行时,我接受UAC提示,我的帐户是管理员的成员,但是我仍然无法写入上面的注册表项。
我还需要做什么?在任何应用程序配置中,如何在HKEY_LOCAL_MACHINE\SOFTWARE
下编写键和值?
进一步的信息..。当我的程序运行时,不会抛出错误,它似乎会写入值。我的猜测是,Windows正在虚拟化我正在编写的位置。我需要写到实际的位置,而不是虚拟的,如果我要隐藏这个特殊的用户帐户。
发布于 2011-02-09 22:02:44
可能程序在64位操作系统上作为32位程序运行?在这种情况下,我建议您搜索在Wow6432Node
子键下创建的HKEY_LOCAL_MACHINE\SOFTWARE
值。
您可以阅读更多关于这种虚拟化here的内容。您可以在某些API中使用KEY_WOW64_32KEY flag,以便能够在不进行虚拟化的情况下使用完全注册中心。
发布于 2011-07-23 15:31:48
将值写入注册表
string user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user,
RegistryRights.WriteKey | RegistryRights.ChangePermissions,
InheritanceFlags.None, PropagationFlags.None, AccessControlType.Deny));
RegistryKey rk = null;
try
{
rk = Registry.CurrentUser.CreateSubKey("SOFTWARE\\TEST",
RegistryKeyPermissionCheck.Default, rs);
rk.SetValue("NAME", "IROSH);
rk.SetValue("FROM", "SRI LANKA");
}
发布于 2011-02-09 22:03:59
这可能与他们在Vista中添加的重定向有关。我会好奇您是否尝试从代码中读取注册表值,以及是否要返回所期望的值。您还可能希望启动RegMon,以查看是否可以看到重定向可能迫使您的位置。
https://stackoverflow.com/questions/4950371
复制相似问题