4

我有一个 32 位应用程序,它写入:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

我的应用程序路径,以便在当前用户登录时启动它。这适用于 32 位系统(即应用程序自动启动)。

我知道在 64 位系统上,注册表重定向开始发挥作用。所以,我搜索:

HKEY_CURRENT_USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

但是 CurrentVersion 子键不存在(但 Wow6432Node 键存在)!所以,我手动创建了它,我的应用程序正确地写入了注册表(我进入注册表并检查。条目在那里)。但是,当当前用户登录时,应用程序没有自动启动。有人能告诉我为什么吗?

顺便说一句,如果我使用 HKEY_LOCAL_MACHINE 分支,这一切都很好。但是,我希望这是特定于用户的。

为什么我不只是使用启动文件夹?

当 UAC 启用并设置为始终通知时,这根本不起作用(即我的应用程序不会自动启动)。不,我不能禁用 UAC。我要求我的应用程序在启用 UAC 并设置为始终通知的情况下运行良好。

如果有人能告诉我原因,我会很高兴忘记我需要使用注册表(我讨厌注册表)。

后备选项(最后的手段):

我将使用任务计划程序 API 来执行此操作。但是,只有在绝对没有其他方法的情况下,我才会这样做。

谢谢!

4

2 回答 2

1

HKEY_CURRENT_USER在 32 位和 64 位应用程序之间共享(没有重定向和 Wow6432Node 密钥)。这是受 WOW64 影响的注册表项的列表。

于 2013-04-24T06:56:28.317 回答
0

无法从用户的 Run 键或 Startup 文件夹启动需要提升的可执行文件。请参阅UAC 团队博客中的用户登录路径中的高程现在被阻止。

最好的解决方案可能是将可执行文件配置为不需要提升。然后,它可以仅在实际需要时启动自身的提升副本。或者,您可以将服务用于需要提升的任务,如果您需要能够代表没有管理员权限的用户执行提升的任务,这是唯一的好方法。

另一种选择是,因为您可以使用 HKLM 成功启动该进程,所以它会为所有用户启动,但如果它不是您想要的用户,则立即退出。

于 2013-05-02T20:58:23.167 回答