windows内核编程之如何防止一个相同的程序重复运行

通过创建互斥量(Mutex)来确保程序单例运行,如果GetLastError返回ERROR_ALREADY_EXISTS,说明已有相同程序运行。同时获取并输出当前进程ID及终端服务会话ID。
摘要由CSDN通过智能技术生成
#include <windows.h>
#include <iostream>
#include <iterator>
#include <string>
using namespace std;
int main(int argc, char* argv[], char* envp[])
{

HANDLE hMutex = CreateMutex(NULL, FALSE, L"ysd");
CHAR szBuffer[128];
ostream_iterator<string> output(cout, "\n");
if (GetLastError() == ERROR_ALREADY_EXISTS)
*output = string("已经有一个相同的程序在运行了");
else
*output = string("这是该程序的第一个实例!");
DWORD ProcessID = GetCurrentProcessId();
DWORD SessionID;
if (ProcessIdToSessionId(ProcessID, &SessionID))
{


sprintf_s(szBuffer, "Process '%d' runs in terminal services session '%d'", ProcessID, SessionID);
*output = string(szBuffer);
}
else
MessageBox(NULL, L"不好意思,不能得到该进程的终端服务", L"调试信息", MB_OK | MB_ICONERROR);

CloseHandle(hMutex);
hMutex = NULL;


cout << "*******************" << endl;

   
system("pause");
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值