【发布时间】:2010-12-15 22:09:54
【问题描述】:
我有一个 Visual c++ 中的 Window (win32 API) 应用程序。我没有使用 MFC。我必须在 Windows 启动时运行我的应用程序。我正在使用 Windows 7 和 Visual Studio 2008。任何人都可以帮助我完成上述任务吗?提前致谢。
【问题讨论】:
标签: winapi visual-c++ registry
我有一个 Visual c++ 中的 Window (win32 API) 应用程序。我没有使用 MFC。我必须在 Windows 启动时运行我的应用程序。我正在使用 Windows 7 和 Visual Studio 2008。任何人都可以帮助我完成上述任务吗?提前致谢。
【问题讨论】:
标签: winapi visual-c++ registry
下面是一些示例代码:
HKEY hkey = NULL;
RegCreateKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
RegSetValueEx(hkey, L"myapp", 0, REG_SZ , (BYTE*)path, (wcslen(path)+1)*2);
【讨论】:
最直接的方法是创建注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
(将代码插入安装程序以添加密钥。)
如果您在HKEY_LOCAL_MACHINE 下创建它,它将适用于该机器的所有用户。如果您在HKEY_CURRENT_USER 下创建它,那么该程序将在启动时仅针对该用户自动运行。
【讨论】:
不了解 Win32,但您的程序的简单快捷方式如何:
C:\Documents and Settings\\开始 菜单\程序\启动
(或使用所有用户而不是用户)
【讨论】:
只需将其添加到注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 键即可。
【讨论】:
查看 SysInternals(现为 Microsoft)的 autoruns。它将向您展示 Windows 可以启动进程的多种方式。您将需要查看 Logon 选项卡,该选项卡显示了几个文件和注册表设置,可以让您在 Logon 上启动东西。服务和驱动程序在系统启动时启动(不需要登录)。 Bootexecute 允许您在启动时运行可能不是您想要的东西。
其余选项卡向您展示如何连接到各种其他系统进程以加载您的代码。难怪 Windows 对于恶意软件作者来说已经成熟了,尤其是如果您以 root 身份运行。
【讨论】:
如果您在 HKEY_LOCAL_MACHINE 下创建注册表项,则会强制本地计算机上的所有用户启动应用程序。在启动此应用程序时,在 HKEY_CURRENT_USER 键下方写入条目以仅针对当前登录的(活动)用户。
【讨论】:
CString csPath ="your path";
HRESULT hres = RegCreateKey(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
hres = RegSetValueEx(hkey, L"your app", 0, REG_SZ , (BYTE*)csPath.GetBuffer(), (wcslen(csPath)+1)*2);
【讨论】: