Windows守护进程简单示例
转载:
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;
}
//启动成功,获取进程的ID
cout<<"守护进程成功,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守护进程简单示例的更多相关文章
- 【转】Windows守护进程的一种简单实现
一讲到守护进程,很多人都想到了Linux系统,确实在Windows上这个说的比较少.今天上午群里有个朋友问我了下Windows下守护进程的实现问题,我想了想,简单用C++写了个小例子,用来实现系统开机 ...
- Linux守护进程简单介绍和实例具体解释
Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...
- VC++使用服务做守护进程的示例(转载)
转载:http://blog.csdn.net/zdy0_2004/article/details/40461571 #define _WIN32_WINNT 0x502 #define _CRT_S ...
- windows守护进程脚本
通常通过进程名称或者端口号来判断进程是否正在运行.但是windows下进程名常常难以区分,比如有两个python脚本程序A和B同时在执行,进程名都是python.exe.若是通过端口来区分,却又只适用 ...
- windows 守护进程
use Win32::Process::Info; while (1==1){ use Sys::Hostname; use HTTP::Date qw(time2iso str2time time2 ...
- .NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计
之前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是<.NET跨平台实践:用C#开发Linux守护进程>和<.NET跨平台实践:再谈用C#开发Linux守护进程 - 完 ...
- PHP7 网络编程(二)daemon守护进程
前言 在一个多任务的计算机操作系统中,守护进程(英语:daemon,/ˈdiːmən/或/ˈdeɪmən/)是一种在后台执行的计算机程序.此类程序会被以进程的形式初始化.守护进程程序的名称通常以字母“ ...
- python并发编程之守护进程、互斥锁以及生产者和消费者模型
一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...
- windows下捕获dump之守护进程
一两个月前为产品写了一个独立的exe,由于产品使用的捕获dump是一个现成的进程外exe,如果以资源的方式集成它容易出现安全警告,由于时间关系没有寻求新的解决方法,还是遵循旧方案,不捕获dump. 最 ...
随机推荐
- OSGI框架
面向Java的动态模型系统 OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方. ...
- ThinkPHP5.0源码学习之缓存Cache(一)
一.文件 1.缓存配置文件:thinkphp\convention.php 2.缓存文件:thinkphp\library\think\Cache.php 3.驱动目录:thinkphp\librar ...
- js前端性能优化之函数节流和函数防抖
前言:针对一些会频繁触发的事件如scroll.resize,如果正常绑定事件处理函数的话,有可能在很短的时间内多次连续触发事件,十分影响性能 节流: 节流:使得一定时间内只触发一次函数. 它和防抖动最 ...
- 从零开始学Python 一
一.安装 1.进入Python官网下载环境:https://www.python.org 2.根据自己的电脑选择安装版本,然后安装即可. 二.运行第一个程序 1.安装完Python,会自带一个编辑器, ...
- location.href 本窗口与window.open 新窗口打开用法
二种新窗口打开的区别: window.open("URL",'top'); 只是表示打开这个页面,并不是打开并刷新页面: window.location.href="UR ...
- hello2 源码分析
1.GreetingServlet.java(问候页面): /** * Copyright (c) 2014 Oracle and/or its affiliates. All rights rese ...
- linux中pthread_join()与pthread_detach()
1.linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态, 如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit ...
- Haxe:东游记(上)part1:intro
原标题:西行漫记之Haxe初探·上篇 1. 简述:haxe是啥? haxe(读作蛤克思),是以前flash时代诞生的一种的开源跨平台方案.学会了haxe,可以直接用这种类似TypeScript的语法, ...
- 网络请求get和post的区别
网络请求get和post的区别 其实本文更应该放在HTTP相关的分类,但是目前我并没有开设这一个分类专栏,so临时储存在HTML分类吧 Get和post是HTTP请求的两种基本方式 get是从服务器上 ...
- jQuery获取name相同被选中的多选框的值
var name= ""; $("input:checkbox[name='AllElection']:checked").each(fu ...