阅读背景:

C++实现双进程守护

来源:互联网 
#include "pch.h"
#include <iostream>
#include <Windows.h>

//线程同步:消息、事件、临界区(不是内核对象)、互斥体
//创建互斥体对象,守护程序利用OpenMutex()函数检测对方的互斥体对象是否存在,不存在则创建进程

//线程回调函数
//参数:程序名称
DWORD WINAPI ThreadCheckProc(LPVOID lParam) {
	STARTUPINFOA si = { sizeof(si) };
	PROCESS_INFORMATION pi = { 0 };
	HANDLE hMutex;
	while (true) {
		hMutex = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, (LPCSTR)lParam);
		if (!hMutex) {
		        //unicode下,用W版会失败
			CreateProcessA(
				(LPCSTR)lParam, 
				NULL, NULL, NULL,
				FALSE,
				CREATE_NEW_CONSOLE, 
				NULL, NULL,
				&si, &pi);
			WaitForSingleObject(pi.hProcess, INFINITE);
			CloseHandle(pi.hProcess);
			CloseHandle(pi.hThread);
		}
		else {
			CloseHandle(hMutex);
		}
		Sleep(500);
	}
}

int main()
{
	DWORD Tid;
	//创建自己的互斥体对象
	CreateMutexA(NULL, TRUE, (LPCSTR)"p1.exe");
	//创建线程检测对方的互斥体
	CreateThread(NULL, 0, ThreadCheckProc, (LPVOID*)"p2.exe", 0, &Tid);
	while (1) { Sleep(500); };
	return 0;
}#include "pch.h"
#include <iostream>
#includ



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: