win32取CreateProcess启动程序的返回值
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2018-03-28 11:21:00
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
有时候需要在主线程中启动一个程序来处理一些事情,然后返回一个结果,比如一些在线更新的程序一般有一个主程序和一个升级程序。主程序调用升级程序,升级程序会有返回值正常情况下是返回一个0值, 这里可以根据自己的情况返回一些有特定意义的值1、2、3等
//更新程序的退出码,
//0没有新版本,
//1有新版本并且已经下载替换重启启动,
//2有新版本但是取消下载啦
//3出现错误
下面是取到这个返回值的方法
DWORD MainWnd::CheckUpdate(LPVOID lpParameter) { //检查更新程序 DWORD pid = GetCurrentProcessId(); TCHAR cmd[MAX_PATH] = { 0 }; _stprintf(cmd, L"%s\\Update.exe %s %s %d", UserData::curPath, s_curVersion.GetData(), _T("http://www.xxx.com/CheckUpdate.php"), pid); STARTUPINFO StartInfo; PROCESS_INFORMATION procStruct; memset(&StartInfo, 0, sizeof(STARTUPINFO)); StartInfo.cb = sizeof(STARTUPINFO); BOOL working = ::CreateProcess(NULL, cmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &StartInfo, &procStruct); if (working == 0) { DWORD error = GetLastError(); MessageBox(NULL, L"启动检查更新出错", L"提示", 0); return 0; } WaitForSingleObject(procStruct.hProcess, INFINITE); unsigned long Result; GetExitCodeProcess(procStruct.hProcess, &Result); if (Result == 1) { //新版本已经更新覆盖需要重启,这个进程直接退出 return 0; } return 0; }