转载:
https://blog.csdn.net/kikaylee/article/details/51395360

/*
@描述:一个简单的Windows守护进程的例子(C++版本)
@作者:kikaylee
@日期:2016-05-13 10:30
*/#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <io.h>
#include <iostream>using namespace std;//隐藏DOS黑窗口
#pragma comment(linker,"/subsystem:\"windows\"  /entry:\"mainCRTStartup\"" ) //定义路径最大程度
#define MAX_PATH 4096
//定义守护进程名称
#define PROCCESS_NAME "test.exe"
//定义写入的注册表路径
#define SELFSTART_REGEDIT_PATH "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"//设置本身开机自启动
BOOL SetSelfStart()
{//获取程序完整名称char pName[MAX_PATH]={0};GetModuleFileNameA(NULL,pName,MAX_PATH);//在注册表中写入启动信息HKEY hKey=NULL;LONG lRet=NULL;lRet=RegOpenKeyExA(HKEY_LOCAL_MACHINE,SELFSTART_REGEDIT_PATH,0,KEY_ALL_ACCESS,&hKey);//判断是否成功if(lRet!=ERROR_SUCCESS){return FALSE;}lRet=RegSetValueExA(hKey,"testProtect",0,REG_SZ,(const unsigned char*)pName,strlen(pName)+sizeof(char));//判断是否成功if(lRet!=ERROR_SUCCESS){return FALSE;}//关闭注册表RegCloseKey(hKey);return TRUE;
}int main()
{//设置程序开机自启动if(!SetSelfStart()){cout<<"守护进程开机自启动失败"<<endl;return -1;}STARTUPINFOA si;//进程对象PROCESS_INFORMATION pi;//初始化ZeroMemory(&si,sizeof(si));si.cb=sizeof(si);ZeroMemory(&pi,sizeof(pi));//获取当前程序的路径char pPath[MAX_PATH]={0};GetCurrentDirectoryA(MAX_PATH,pPath);//拼接需要守护的程序strcat(pPath,"\\");strcat(pPath,PROCCESS_NAME);//构造cmd执行守护进程的字符串char pCmd[MAX_PATH]={0};strcat(pCmd,"cmd /c ");strcat(pCmd,pPath);//无限循环,监视守护进程do{//检查守护程序是否存在if(_access(pPath,0)!=-1){//创建子进程,判断是否执行成功if(!CreateProcessA(NULL,pCmd,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){cout<<"守护进程启动失败,程序即将退出"<<endl;return -1;}//启动成功,获取进程的IDcout<<"守护进程成功,ID:"<<pi.dwProcessId<<endl;//无限等待子进程退出WaitForSingleObject(pi.hProcess,INFINITE);//如果退出了cout<<"守护进程退出了。。。"<<endl;//关闭进程和句柄CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}else{cout<<"守护程序不存在"<<endl;}//睡一下,重启Sleep(2000);}while(true);return 0;
}

Windows守护进程简单示例相关推荐

  1. Windows守护进程实现/设置程序图标/隐藏黑窗/获取exe所在目录/设置开机自启动

    功能:实现一个windows守护进程,设置有自定义图标,启动后隐藏黑窗口,获取exe所在目录,并设置开机自启动(需要以管理员权限运行).如果需要打包成可执行的安装包程序,见另一篇博客:https:// ...

  2. windows守护进程_在Linux的Windows子系统上(WSL)使用Docker(Ubuntu)

    平时开发大部人都是在提供了高效GUI的window下工作,但是真正部署环境普遍都是在Linux中,所以为了让开发环境和部署环境统一,我们需要在windows模拟LInux环境,以前我们可能通过虚拟机的 ...

  3. windows守护进程

    一.逻辑分析 1.windows没有fork函数,无法创建僵尸进程,使用打开非子进程的方式打开外部进程---打开外部进程 2.守护进程应该是单例的进程--->单例进程 3.守护进程应该是存在一个 ...

  4. windows守护进程脚本

    通常通过进程名称或者端口号来判断进程是否正在运行.但是windows下进程名常常难以区分,比如有两个python脚本程序A和B同时在执行,进程名都是python.exe.若是通过端口来区分,却又只适用 ...

  5. python守护进程windows_如何把 python predict程序 做成 windows 守护进程

    展开全部 import os,sys,commands,time def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/n ...

  6. 获取Windows Shell的简单示例程序二

    程序基本流程:       1,创建服务端Socket,端口绑定,监听.             这也是一般的socket程序的处理流程.       2,启动循环并在循环体中接收客户端请求并返回客户 ...

  7. windows 守护进程

    use Win32::Process::Info; while (1==1){use Sys::Hostname; use HTTP::Date qw(time2iso str2time time2i ...

  8. .NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计

    几年前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是<.NET跨平台实践:用C#开发Linux守护进程.NET跨平台实践:再谈用C#开发Linux守护进程 - 完整篇 这就是本文 ...

  9. 从进程组、会话、终端的概念深入理解守护进程

    从进程组.会话.终端的概念深入理解守护进程 一.写在前面 「守护进程」是 Linux 的一种长期运行的后台服务进程,也有人称它为「精灵进程」.我们常见的 httpd.named.sshd 等服务都是以 ...

最新文章

  1. python3 多进程库 multiprocessing 使用简介
  2. Android之ListViewJson加载网络数据
  3. php 替换字符串 图片,PHP替换字符串实现图片自适应屏幕实例代码
  4. 无服务器-仅仅是构建现代应用程序的一种方法?
  5. Java讲课笔记07:计数循环与嵌套循环
  6. python之路 mysql 博客园_python之路--MySQL数据库初识
  7. SAP License:利用MM的预留功能进行生产控制
  8. php 数组对,PHP数组游标实现对数组的各种操作详解
  9. 漫画 | 如何获得关系数据库王国的永久居住权?
  10. 如何使用Syncios Data Recovery直接从 iOS 设备恢复数据?
  11. 部署war包到tomcat根目录
  12. Fiddler中文版汉化插件 0.1
  13. ArcGIS 图像合并至新栅格图层
  14. 高级英语(张汉熙版)第一册学习笔记(原文及全文翻译)——2 - Hiroshima-The “Liveliest“ City in Japan (excerpts)(广岛——日本“最有活力”的城市)
  15. rand和srand函数的用法
  16. rabbitMQ无法访问web管理页面
  17. python 压缩图片为指定大小
  18. 织梦模板安装后出现中文乱码?
  19. IMS QTI 实践指南 | 01 简单题型 Simple Items
  20. 深度学习应用在图像分割上的网络模型概述

热门文章

  1. 【leetcode】Integer to Roman
  2. 令人失望的IE7Beta,仍然不支持Web标准。
  3. centos7安装samba
  4. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
  5. eclipse实现Android登录功能,eclipse开发安卓登录
  6. ubuntu 查找qt是否安装_Ubuntu Qt 安装教程--快速下载连接(网盘)
  7. 晓庄学院计算机科学分数,南京晓庄学院计算机单招分数
  8. x光肺部分割数据集_吴恩达发布了大型X光数据集,斯坦福AI诊断部分超越人类 | AAAI 2019...
  9. finereport字段显示设置_QA | 表单如何设置字段显示逻辑?
  10. java 多个方法_java中的多个main()方法