//TCHAR szApplicationName[] = TEXT("UpdateMi.exe") ;
TCHAR szCommandLine[MAX_PATH];
memset(szCommandLine,0,sizeof(szCommandLine));
lstrcpy(szCommandLine,_T("UpdateMi.exe "));//要启动的进程
lstrcat(szCommandLine,_T("TestProcess"));//传给刚启动的进程的参数
STARTUPINFO si = {sizeof(si)} ;
PROCESS_INFORMATION pi ;
BOOL bRet=CreateProcess(
NULL,//NULL, // name of executable module
szCommandLine, // command line string
NULL, // process attributes
NULL, // thread attributes
FALSE, // handle inheritance option
CREATE_UNICODE_ENVIRONMENT|CREATE_NEW_CONSOLE,//0, UNICODE版本下 // creation flags
NULL, // new environment block
NULL, // current directory name
&si, // startup information
&pi); // process information
if(bRet)
{
CloseHandle(pi.hThread);// 关闭子进程的主线程句柄
CloseHandle(pi.hProcess);// 关闭子进程句柄
}
//子进程有时需要在自己的程序中关闭父进程,可以在创建子进程时把父进程名称传进去
//关闭
CString cstrCmdLine=AfxGetApp()->m_lpCmdLine;
MessageBox(cstrCmdLine);
if(cstrCmdLine!=_T(""))
{
HWND hWndRun=::FindWindow(NULL,cstrCmdLine);//_T("Dialog"),_T("CLogonDlg")
for(int i=0;i<5 && hWndRun!=NULL;i++)//多关闭几次
{
::PostMessage(hWndRun,WM_QUIT,0,0);//18
hWndRun = ::FindWindow(NULL,cstrCmdLine);
Sleep(10);
}
}
//第二种方法
//启动
SHELLEXECUTEINFO ShExecInfo;
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb =_T("runas") /*NULL*/;
ShExecInfo.lpFile =_T("UpdateMi.exe"); //can be a file as well
ShExecInfo.lpParameters =szCommandLine/*_T("PROCESS")*/;
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
//关闭
if( ShExecInfo.hProcess != NULL)
{
TerminateProcess(ShExecInfo.hProcess,0);
ShExecInfo.hProcess = NULL;
}
VC++启动一个新的进程
最新推荐文章于 2025-03-07 09:00:00 发布