2

我创建了一个小型 vb6 应用程序,它在 HKLM 配置单元中编辑注册表。它利用函数RegSetValueEx。但是当在 windows 7 和 windows 8 pc 中运行 exe 文件时,即使在管理员用户中运行它也不会编辑注册表。

在 Windows XP 中它工作正常。如果我在 Windows 7 和 8 中运行与“以管理员身份运行”相同的应用程序(通过右键单击 exe 然后运行)那么它可以正常工作。我认为 Windows 7 和 8 id 设计为像仅此而已。但是有什么方法可以在不以管理员身份运行的情况下编辑它吗?或者vb6中是否有任何相同的代码。

这是我的小代码

重要提示: 检查代码时创建exe然后运行exe并单击按钮(HKEY_LOCAL_MACHINE\SOFTWARE\Demo注册表被添加到wow32节点,因为vb6是32位应用程序)。通过打开代码直接运行代码可以更改注册表.但是创建exe然后运行它会产生问题,这是任何应用程序中的实时场景。

4

2 回答 2

6

自 Windows 2000 以来,Microsoft 一直警告开发人员不要以普通用户身份访问注册表的 HKLM 分支,因为它迟早会被限制为管理员。他们还说你不应该写信给Program Files.

他们直到 Windows Vista 才强制执行该规则,因此没有人觉得需要更改任何内容。

现在你有了它:不要以普通用户的身份写信给 HKLM - 它不起作用。不要将您的设置写入Program Files. 它不起作用。

普通用户运行的应用程序可以将他们的数据写入注册表中的用户文件夹和用户配置单元,其他任何地方都没有。

于 2013-04-17T14:25:49.660 回答
5

如果您的应用程序的唯一目的是写入 HKLM 配置单元中的该值,那么您将需要向可执行文件添加“requiresAdministrator”清单,从而导致 Windows 在每次运行时提示用户进行管理员访问。

如果这是一个较大项目的一小部分,那么您应该使用 COM 提升或只运行带有上述清单的小型存根可执行文件,允许窗口仅在需要时提示。

如果您的应用程序根本不需要管理员访问权限,那么您应该停止它尝试写入管理员受限位置,而是使用用户自己的 HKCU 配置单元。

于 2013-04-17T14:41:56.113 回答