C++ 如何使用注册表中的CurrentVersion\Run键为特定用户自动启动程序?

C++ 如何使用注册表中的CurrentVersion\Run键为特定用户自动启动程序?,c++,windows,registry,64-bit,autostart,C++,Windows,Registry,64 Bit,Autostart,我有一个32位应用程序,它可以写入: HKEY\ U当前\用户\软件\ Microsoft\Windows\CurrentVersion\Run 我的应用程序路径,以便在当前用户登录时启动。这在32位系统上运行良好(即应用程序自动启动) 我知道在64位系统上,注册表重定向起作用。因此,我搜索: HKEY\U CURRENT\U USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run 但是CurrentVersion子密钥不存在

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

HKEY\ U当前\用户\软件\ Microsoft\Windows\CurrentVersion\Run

我的应用程序路径,以便在当前用户登录时启动。这在32位系统上运行良好(即应用程序自动启动)

我知道在64位系统上,注册表重定向起作用。因此,我搜索:

HKEY\U CURRENT\U USER\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

但是CurrentVersion子密钥不存在(尽管WOW6432节点密钥存在)!因此,我手动创建了它,我的应用程序正确地写入了注册表(我进入注册表并进行了检查,条目就在那里)。但是,当当前用户登录时,应用程序没有自动启动。有人能告诉我为什么吗

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

为什么我不只是使用启动文件夹? 当UAC被启用并设置为“始终通知”时,这根本不起作用(即,我的应用程序不会自动启动)。不,我不能禁用UAC。我要求我的应用程序在启用UAC并设置为始终通知的情况下运行良好

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

备用选项(最后手段): 我将使用任务调度器API来实现这一点。但是,只有在绝对没有其他方法的情况下,我才会这样做


谢谢

HKEY_当前_用户
在32位和64位应用程序之间共享(没有重定向和Wow6432Node密钥)。以下是列表。

无法从用户的运行键或启动文件夹启动需要提升的可执行文件。请参阅UAC团队的博客

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


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

如果您正在运行防病毒软件,则可能会阻止您的应用程序修改注册表中的
\CurrentVersion\Run
。@CaptainObvlious,关闭应用程序后,我检查了注册表。预期条目位于预期位置。可能需要打开事件查看器(在管理工具中),查看Windows是否在启动期间报告错误。如果您的注册表条目或启动应用程序出现问题,通常会有一个很好的更改,您将在事件中看到一个条目viewer@CaptainObvlious,我刚才查看了系统和应用程序日志。没有有关该应用程序的错误/信息。在64位操作系统中写入
HKEY\U CURRENT\U USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
时会发生什么情况?注册表项是否存在并且没有被启动,或者注册表项是否没有被写入?嗯,我最初就是这样想的。我试过了,但没有雪茄。