遍历并监视,重新启动进程

#include "tlhelp32.h"
#include <Psapi.h>
#pragma comment (lib,"Psapi.lib")


void CTestComExeDlg::MonitorProcess()
{

	while(bRun)
	{
		//CComPtr<IComExecute> pComExecute;
		HRESULT hr = ::CoCreateInstance( CLSID_ComExecute, NULL, CLSCTX_ALL,
			IID_IComExecute, (void**)&m_pf );

		if ( FAILED( hr ) )
		{		
			MonitorProcess();
		}

		BSTR bstrRet;
		m_pf->TestComExe(_bstr_t("abc"), &bstrRet);

		PROCESSENTRY32 pe32;
		pe32.dwSize = sizeof( pe32 );

		HANDLE hProcessSnap = ::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
		if ( INVALID_HANDLE_VALUE == hProcessSnap )
		{
			// Recode error information
		}

		HANDLE hProcess = NULL;
		BOOL bMore = ::Process32First( hProcessSnap, &pe32 );
		while( bMore )
		{
			DWORD dwProcessID = pe32.th32ProcessID;
			if ( dwProcessID == 0 )
			{
				bMore = ::Process32Next( hProcessSnap, &pe32 );
				continue;
			}

			hProcess = ::OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessID );

			TCHAR szAppLocation[MAX_PATH] = _T("");

			DWORD dwRet = ::GetModuleFileNameEx( hProcess, NULL, 
				szAppLocation, MAX_PATH );
			if ( 0 == dwRet )
			{
				bMore = ::Process32Next( hProcessSnap, &pe32 );					
				CloseHandle( hProcess );
				continue;
			}

			TCHAR szProcessName[MAX_PATH] = _T("");
			dwRet = ::GetLongPathName( szAppLocation, szProcessName, 
				MAX_PATH );
			if ( 0 == dwRet )
			{
				bMore = ::Process32Next( hProcessSnap, &pe32 );

				CloseHandle( hProcess );

				continue;
			}
			CString csProcessName = szProcessName;
			csProcessName = csProcessName.Right( csProcessName.GetLength()
				- csProcessName.ReverseFind(_T('\\')) - 1);


			if ( 0 == csProcessName.CompareNoCase(_T("ComExe.exe")))	
			{
				hProcess = OpenProcess( PROCESS_VM_OPERATION|SYNCHRONIZE, FALSE, dwProcessID );
				m_ProcessID = hProcess;
				break;
			}

			bMore = ::Process32Next( hProcessSnap, &pe32 );		
		}

		CloseHandle( hProcessSnap );

		WaitForSingleObject( hProcess, INFINITE );

		m_pf = NULL;
	}	

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值