天天看點

createprocess重新開機程式_win32取CreateProcess啟動程式的傳回值

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

}