win32取CreateProcess启动程序的返回值

来源:赵克立 分类: Win32 标签:Win32发布时间:2018-03-28 11:16:29浏览:129
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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;
}



微信号:mokuyu QQ群:215861553 紧急求助须知
留下一点心意, :)
点击更换验证码
留言