c++应用程序在windows引导下自动运行
C++ application autorun on windows boot
我正在开发一个c++应用程序,它有一个选项"autostart"。当用户设置该选项时,程序应该将中的更改为在下次Windows启动和用户登录时由Windows启动。当用户取消设置这个选项时,程序必须把东西放回去。
我不需要将app作为服务运行,所以在用户登录后在某些用户的帐户下运行就足够了。那么,让windows在下次启动和用户登录时运行我的应用程序的最佳方法是什么?我在谷歌上搜索了一个使用启动文件夹的建议。这是最友好无害的方式吗?
如果是这样,我有两个问题:
- 如何检测启动文件夹我不满意SHGetSpecialFolderLocation()的输出。它似乎返回我的"HOME"目录在测试WinXP平台(C:Documents and settings%username%)。
- 如何使用c++创建。link文件?我认为复制整个。exe文件是个坏主意。
实际上我的程序是跨平台的,但是一个选项"autostart"将是windows的。
-
尝试SHGetSpecialFolderLocation并在Windows7中获得良好的值:"C:UsersPavelAppDataRoamingMicrosoftWindowsStart MenuProgramsStartup"注意:如果你使用MinGW,在包含ShlObj.h
之前,你应该将_WIN32_IE定义为0x0400。 使用注册表(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun)和启动文件夹之间的最佳解决方案(从良好编程的角度来看)是什么?
我建议使用HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRun
这样的注册表项。在这里创建一个字符串值,其中包含您的软件名称和主要可执行路径的值-这应该足够了。比创建. link文件容易得多——注册表编辑API可以很容易地从c++
正如@Ben建议的,对于你的任务,最好使用HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun
。这将自动启动您的应用程序仅为当前用户,而我的第一个建议将为所有用户。
更新2:
还要注意,无论你选择什么方法来实现自动启动,你可能会遇到杀毒软件的问题,因为大多数具有主动防御的杀毒软件都在密切关注程序是否自动运行。
只是为了清楚,启动文件夹项发生在登录时,而不是启动时。这听起来像是你想要的,我只是想把条款搞清楚。
我认为你实际上想要SHGetSpecialFolderPath和CSIDL_STARTUP常量。如果我没看错文档,应该会给你想要的路径。
使用SHGetSpecialFolderPath确定启动文件夹的路径(参见Michael Kohne的答案)
然后使用IShellLink在此文件夹中创建快捷方式。
编辑:我认为在注册表中使用Run键更可靠。- 如果从脚本运行应用程序,则在 Linux 中使用 GDB
- Bash 自动完成一个选项,而不运行应用程序
- 以管理员身份运行应用程序时,有没有办法获取非管理员用户名
- 使用 C++ dll 运行 c# 应用程序会生成无法加载异常
- 使用 OpenSSL 运行应用程序时出现问题
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 从Visual Studio运行应用程序会导致错误(由CMake生成)
- BOOST ::日志是每次运行应用程序时都可能旋转文件
- 开发时C++ .lib,运行应用程序时.dll
- 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?
- macOS 差异在“访达”和“终端”中运行应用程序
- 使用WordPress在网络服务器上运行C 应用程序
- QT创建者的运行应用程序会出现错误QXCBConnection,然后流产
- 在不同的 Ubuntu 版本中编译和运行 c++ 应用程序
- Visual Studio - C++ - 以 32 位或 64 位构建和运行应用程序 - 从适当的程序文件目录加载 D
- Eclipse 在检查语法时看不到包含文件,但在构建或运行应用程序时会看到
- 在另一台 Mac 上运行应用程序
- 在win8登录屏幕上运行应用程序
- 尝试在Qt中运行应用程序时出错
- 为什么当我在Visual c ++ studio 2010中运行应用程序时光标会转到最后一个文本框