vc 打开外部线程并等待结束

CreateProcess

lpApplicationName:指向一个以空结尾的串,他指定了要执行的模块 ***此参数为空时命令行参数才能正常传递*** 想运行的可执行文件的名字的字符串(应含扩展名)。如果找不到该文件,CreateProcess运行失败。应该设为NULL。

    lpCommandLine:指向一个以空结尾的串,该串定义了要执行的命令行.传递给新进程的命令行字符串,应当为非常量字符串的地址。可以设定一个完整的命令行,如果第一个标记没有扩展名,CreateProcess将其假设为.exe。如果找不到该文件,CreateProcess按环境设置目录搜索运行。

    lpProcessAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承.

    lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承.

    bInheritHandles,:表明新进程是否从调用进程继承句柄.

    dwCreationFlags:定义控制优先类和进程创建的附加标志.

    lpEnvironment:指向一个新进程的环境块.

    lpCurrentDirectory:指向一个以空结尾的串,该串定义了子进程的当前驱动器和当前目录.

    lpStartupInfo:指向一个STARTUPINFO结构,该结构定义了新进程的主窗口将如何显示.

    lpProcessInformation:指向PROCESS_INFORMATION结构,该结构接受关于新进程的表示信息.

使用

        //WinExec(path.c_str(), SW_SHOW); 
	//HINSTANCE instance = ShellExecute(NULL, "open", path.c_str(), NULL, NULL, SW_SHOWNORMAL);

	STARTUPINFO si;
	PROCESS_INFORMATION pi;

	ZeroMemory(&pi, sizeof(pi));
	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(si);

	auto desPath = path + " " + parameter;
	//WinExec("explorer E:\\work\\code\\AutoUpdate\\AutoUpdate\\AutoUpdate\\Debug\\win7sp1.msu", SW_SHOWNA);

	if (CreateProcess(NULL, (LPSTR)desPath.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
		//if (CreateProcess(path.c_str(), (LPSTR)parameter.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
		//if (CreateProcess(path.c_str(), _T("E:\\work\\code\\AutoUpdate\\AutoUpdate\\AutoUpdate\\Debug\\win7sp1.msu"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
	{

	}
	else {
		//创建失败
	}

	//等待程序执行结束:
	WaitForSingleObject(pi.hProcess, INFINITE);

	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
posted @ 2021-09-07 10:48  Hey,Coder!  阅读(163)  评论(0编辑  收藏  举报