c++应用程序在windows引导下自动运行

C++ application autorun on windows boot

本文关键字:运行 应用程序 windows c++      更新时间:2023-10-16

我正在开发一个c++应用程序,它有一个选项"autostart"。当用户设置该选项时,程序应该将中的更改为在下次Windows启动和用户登录时由Windows启动。当用户取消设置这个选项时,程序必须把东西放回去。

我不需要将app作为服务运行,所以在用户登录后在某些用户的帐户下运行就足够了。那么,让windows在下次启动和用户登录时运行我的应用程序的最佳方法是什么?我在谷歌上搜索了一个使用启动文件夹的建议。这是最友好无害的方式吗?

如果是这样,我有两个问题:

  1. 如何检测启动文件夹我不满意SHGetSpecialFolderLocation()的输出。它似乎返回我的"HOME"目录在测试WinXP平台(C:Documents and settings%username%)。
  2. 如何使用c++创建。link文件?我认为复制整个。exe文件是个坏主意。

实际上我的程序是跨平台的,但是一个选项"autostart"将是windows的。

  1. 尝试SHGetSpecialFolderLocation并在Windows7中获得良好的值:"C:UsersPavelAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup"注意:如果你使用MinGW,在包含ShlObj.h

  2. 之前,你应该将_WIN32_IE定义为0x0400。
  3. 使用注册表(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun)和启动文件夹之间的最佳解决方案(从良好编程的角度来看)是什么?

我建议使用HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun这样的注册表项。在这里创建一个字符串值,其中包含您的软件名称和主要可执行路径的值-这应该足够了。比创建. link文件容易得多——注册表编辑API可以很容易地从c++

中访问。更新:

正如@Ben建议的,对于你的任务,最好使用HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun。这将自动启动您的应用程序仅为当前用户,而我的第一个建议将为所有用户。

更新2:

还要注意,无论你选择什么方法来实现自动启动,你可能会遇到杀毒软件的问题,因为大多数具有主动防御的杀毒软件都在密切关注程序是否自动运行。

只是为了清楚,启动文件夹项发生在登录时,而不是启动时。这听起来像是你想要的,我只是想把条款搞清楚。

我认为你实际上想要SHGetSpecialFolderPath和CSIDL_STARTUP常量。如果我没看错文档,应该会给你想要的路径。

使用SHGetSpecialFolderPath确定启动文件夹的路径(参见Michael Kohne的答案)

然后使用IShellLink在此文件夹中创建快捷方式。

编辑:我认为在注册表中使用Run键更可靠。