如何设置程序开机启动?(1)Window10

当我们在编写一些服务器程序或者运行在后台的程序的时候,需要把它们隐藏起来的,但是有的时候作为服务器的电脑需要该程序自充开机后就一直运行,那么这里就教大家如何设置开机启动

想要了解如何隐藏程序运行时的命令窗口可以看这一篇:运行代码消除命令框-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使用 -> 选中静态库选项。

C、重启电脑后发现任务管理器里面启动这个程序!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值