MFC获取主exe路径、启动另一个进程、关闭另一个进程、使同時只有一個進程在運行

启动另一个进程

STARTUPINFO startupInfo;
  
 	CString strStartPath1 = GetMainExeDir() + _T("xxxx\\xxxx.exe");
  
  	ZeroMemory( &startupInfo, sizeof( startupInfo ) );
  	startupInfo.cb = sizeof( startupInfo );
  	startupInfo.dwFlags = STARTF_USESHOWWINDOW; // 使特定成员有效
  	startupInfo.wShowWindow = (WORD)SW_SHOW;
  	PROCESS_INFORMATION processInfo;

DWORD dwErr = 0;
		if (!CreateProcess(strStartPath1, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo/*processInfo*/))
		{
			dwErr = GetLastError();
		}


关闭另一个进程sItemText为进程名称

	PROCESSENTRY32 pe;
	HANDLE hProcess;
	CString filepath;
	HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
	pe.dwSize=sizeof(PROCESSENTRY32);
	if(Process32First(hShot,&pe))
	{
		do
		{ 
			if(wcscmp(pe.szExeFile,sItemText)==0)
			{
				hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
				TerminateProcess(hProcess,0); 
			}
		}
		while(Process32Next(hShot,&pe));
	}
	CloseHandle(hShot); 
	return 0;

获取主exe路径

CString path; 
	GetModuleFileName(NULL,path.GetBufferSetLength(MAX_PATH+1),MAX_PATH); 
	path.ReleaseBuffer(); 
	int pos = path.ReverseFind('\\'); 
	path = path.Left(pos);


使同時只有一個進程在運行

	CString name = _T("yourProcess.exe"); //進程名稱

	CreateMutex(NULL, TRUE, MutexGUID);
	if (GetLastError() == ERROR_ALREADY_EXISTS)
	{
		//HWND hRet = FindWindow(NULL, _T("BEProjectUpload.exe"));

		PROCESSENTRY32 pe;
		DWORD processID = 0;
		//snap快照
		HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
		pe.dwSize = sizeof(PROCESSENTRY32);
		//减速上一步获得的windows的快照的每个进程,first,next函数
		if (!Process32First(hSnapshot, &pe))
		{
			return 0;
		}

		CString name1, name2;

		do 
		{
			pe.dwSize = sizeof(PROCESSENTRY32);
			name1 = pe.szExeFile;
			name2 = name;
			name1.MakeUpper();
			name2.MakeUpper();

			//FindWindow()

			if (name1 == name2)
			{
				processID = pe.th32ProcessID;
				break;
			}
			if (Process32Next(hSnapshot, &pe) == FALSE)
			{
				break;
			}
		} while (1);



		CloseHandle(hSnapshot);
		return FALSE;
	}





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值