RegSetValueEx需要以管理员身份运行吗?

时间:2013-04-17 14:09:29

标签: windows vb.net vb6 registry regedit

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

在Windows XP中它工作正常。如果我在Windows 7和8中运行“以管理员身份运行”(通过右键单击exe然后运行)相同的应用程序然后它正常工作。我认为Windows 7和8 id设计只是这样工作。但有没有任何方法可以编辑它而无需以管理员身份运行?或者vb6中是否有任何相同的代码。

这是我的小code

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

2 个答案:

答案 0 :(得分:6)

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

他们在Windows Vista之前没有执行该规则,所以没有人觉得有必要改变任何东西。

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

普通用户运行的应用程序可能会将其数据写入注册表中的用户文件夹和用户配置单元,而不是其他地方。

答案 1 :(得分:5)

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

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

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