有时候需要在主线程中启动一个程序来处理一些事情,然后返回一个结果,比如一些在线更新的程序一般有一个主程序和一个升级程序。主程序调用升级程序,升级程序会有返回值正常情况下是返回一个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;
}