在控制台程序的函数中使用ExitProcess函数,退出函数,调用者接收返回值:

	DWORD nResult;
	SHELLEXECUTEINFO ShExeInfo = { 0 };
	ShExeInfo.cbSize = sizeof(SHELLEXECUTEINFO);
	ShExeInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
	ShExeInfo.hwnd = NULL;
	ShExeInfo.lpVerb = NULL;
	ShExeInfo.lpFile = _T("a.exe");
	ShExeInfo.lpParameters = _T(" 1");
	ShExeInfo.lpDirectory = NULL;
	ShExeInfo.nShow = SW_HIDE;
	ShExeInfo.hInstApp = NULL;
	ShellExecuteEx(&ShExeInfo);
	WaitForSingleObject(ShExeInfo.hProcess, 1000 * 120);
	GetExitCodeProcess(ShExeInfo.hProcess, &nResult);
	//被调用进程用ExitProcess(0)返回指定的值

调用控制台注册组件

VOID RegisterReportCom()
{
	SHELLEXECUTEINFO ShExecInfo = { 0 };
	ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
	ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
	ShExecInfo.hwnd = NULL;
	ShExecInfo.lpVerb = _T("runas");

	ShExecInfo.lpFile = _T("C:/Windows/SysWOW64/regsvr32.exe");

	CString  strPath  = GetApplicationPath()+ _T("gregn6.dll /s");
	ShExecInfo.lpParameters = strPath ;

	ShExecInfo.lpDirectory  = NULL;
	ShExecInfo.nShow        = SW_HIDE;
	ShExecInfo.hInstApp     = NULL;

	ShellExecuteEx(&ShExecInfo);

	strPath = GetApplicationPath() + _T("grdes6.dll /s");
	ShExecInfo.lpParameters = strPath ;
	ShellExecuteEx(&ShExecInfo);
}