有時候需要在主線程中啟動一個程式來處理一些事情,然後傳回一個結果,比如一些線上更新的程式一般有一個主程式和一個更新程式。主程式調用更新程式,更新程式會有傳回值正常情況下是傳回一個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;
}