当我们在编写一些服务器程序或者运行在后台的程序的时候,需要把它们隐藏起来的,但是有的时候作为服务器的电脑需要该程序自充开机后就一直运行,那么这里就教大家如何设置开机启动
想要了解如何隐藏程序运行时的命令窗口可以看这一篇:运行代码消除命令框-CSDN博客
这个是第一种方法(注册表),第二种方法看这里:如何设置程序开机启动?Window10-CSDN博客
1、将程序以管理员身份运行
项目右键 -> 属性 -> 链接器 -> 清单文件 -> UAC执行级别 -> 选中Administator选项。
这样项目就能自动以管理员身份运行了。
2、设置注册表编辑器
A、开始搜索 注册表编辑器
B、按照下面的路径进入到注册表中
计算机 -> HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Windows -> CurrentVersion -> Run
3、代码编写
void AutoInvoke() {
//如果自动启动项里面已经有这个文件了,就不用管他了
CString strPath = CString(_T("%SystemBoot%\\SysWOW64\\RemoteCtrl.exe"));
if (PathFileExists(strPath)) {
return;
}
//第2步骤里面的启动项路径
CString strSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
CString strInfo = _T("该程序只允许用于合法的用途!\n");
strInfo += _T("继续运行该程序,将使得这台机器处于被监控状态!\n");
strInfo += _T("如果你不希望这样,请按“取消”按钮,退出程序。\n");
strInfo += _T("按下“是”按钮,该程序将被复制到你的机器上,并随系统启动而自动运行!\n");
strInfo += _T("按下“否”按钮,程序只运行一次,不会在系统内留下任何东西!\n");
int ret = MessageBox(NULL, strInfo, _T("警告"), MB_ICONWARNING | MB_YESNOCANCEL | MB_TOPMOST);
if (ret == IDYES) {
char sPath[MAX_PATH] = "";
char sSys[MAX_PATH] = "";
//你代码生成的exe文件
std::string strExe = "\\XXXX.exe ";
GetCurrentDirectoryA(MAX_PATH, sPath);
GetSystemDirectoryA(sSys, sizeof(sSys));
//使用软连接将文件复制到系统文件下面
std::string strCmd = "mklink " + std::string(sSys) + strExe + std::string(sPath) + strExe;
ret = system(strCmd.c_str());
TRACE("ret = %d\r\n", ret);
HKEY hKey = NULL;
//在启动项注册表里面添加键名
ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKey);
if (ret != ERROR_SUCCESS) {
RegCloseKey(hKey);
MessageBox(NULL, _T("设置为自动开机失败!是否权限不足?\r\n程序启动失败!"), _T("错误"), MB_ICONERROR | MB_TOPMOST);
::exit(0);
}
//在启动项注册表里面设置键对应的值
ret = RegSetValueEx(hKey, _T("RemoteCtrl"), 0, REG_EXPAND_SZ, (BYTE*)(LPCTSTR)strPath, strPath.GetLength() * sizeof(TCHAR));
if (ret != ERROR_SUCCESS) {
RegCloseKey(hKey);
MessageBox(NULL, _T("设置为自动开机失败!是否权限不足?\r\n程序启动失败!"), _T("错误"), MB_ICONERROR | MB_TOPMOST);
::exit(0);
}
RegCloseKey(hKey);
}
else if (ret == IDCANCEL) {
::exit(0);
}
return;
}
4、验证(我设置的是RemoteCtrl.exe)
A、使用everything等查找工具查询你的exe文件是否在sysWOW64文件夹下面
B、在步骤2的注册表里面查看是否有你的exe文件
C、重启电脑后发现任务管理器里面并没有启动这个程序!
5、将程序的运行权限设置回本身 + 静态库生成
A、权限设置回本身
项目右键 -> 属性 -> 链接器 -> 清单文件 -> UAC执行级别 -> 选中aslnvoker选项。
B、静态库生成
项目右键 -> 属性 -> 配置属性 -> 高级 -> MFC使用 -> 选中静态库选项。