创建可执行进程(windows)在win10下的表现

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建可执行进程(windows)在win10下的表现相关的知识,希望对你有一定的参考价值。

CreateProcess

CreateProcess 函数在windows 10 下已经能够自动接收创建进程的输出,不用在像以前那样去创建管道去接收,而且这个函数容易出错了。

child

创建子进程

#include <iostream>

int main()

    std::cout << "Hello World!\\n";
    getchar();

如代码所示,等待按键结束

father

int main()

	STARTUPINFOA si;
	PROCESS_INFORMATION pi;

	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(si);
	ZeroMemory(&pi, sizeof(pi));
	if(!CreateProcessA(NULL, (LPSTR)"child1.exe", NULL, NULL, TRUE, 0, NULL, NULL,&si,&pi))
	// Start the child process. 
	
		printf("CreateProcess failed (%d).\\n", GetLastError());
		return -1;
	
	ListenSingleProcessFinish(pi.hProcess);
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);

创建子进程后,子进程输出到了父窗口里面,并没有管道约束。

父进程直接输出了hello world ,并且等待按键结束。
以下再提供一些有用的函数

#include<iostream>
#include<Windows.h>
#include<tchar.h>
#include <tlhelp32.h>//声明快照函数的头文件

bool IsProcessRun(const WCHAR * pName)

	HANDLE hProcessSnap;
	HANDLE hProcess;
	PROCESSENTRY32 pe32;
	DWORD dwPriorityClass;

	bool bFind = false;
	
	// 获取系统中所有进程的快照。
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hProcessSnap == INVALID_HANDLE_VALUE)
	
		return false;
	

	// 在使用结构之前设置结构的大小。
	pe32.dwSize = sizeof(PROCESSENTRY32);

	// 获取第一个进程的信息
	// 如果不成功则退出
	if (!Process32First(hProcessSnap, &pe32))
	
		CloseHandle(hProcessSnap);          // clean the snapshot object
		return false;
	
	//现在遍历进程的快照,并且依次显示每个进程的信息
	do
	
		// Retrieve the priority class.
		dwPriorityClass = 0;
		if (::wcsstr(pe32.szExeFile, pName) != NULL)
		
			bFind = true;
			break;
		
	 while (Process32Next(hProcessSnap, &pe32));

	CloseHandle(hProcessSnap);
	return bFind;

#include "stdafx.h"

using namespace std;
enum PROCESS_RESULT
 PROCESS_NORMAL_END, //正常退出
 PROCESS_ABNORMAL_END, //异常退出
 PROCESS_UNKNOWN_END, //未知错误
;

//监听某个进程是否结束
PROCESS_RESULT ListenSingleProcessFinish(HANDLE hHandle)

	std::cout << "开始监听" << std::endl;
	DWORD wait_result =::WaitForSingleObject(hHandle,INFINITE);
	if (wait_result == WAIT_OBJECT_0 + 1)
	
		cout << "正常退出" << endl;
		return PROCESS_NORMAL_END;
	
	else if (wait_result == WAIT_OBJECT_0) 
	
		cout << "异常退出" << endl;
		return PROCESS_ABNORMAL_END;
	
	else
		return PROCESS_UNKNOWN_END;
	



int _tmain(int argc, _TCHAR* argv[])

	HANDLE hhanld = OpenProcess(PROCESS_ALL_ACCESS,NULL,15232); //获取进程句柄
	if (hhanld !=NULL)
	
		ListenSingleProcessFinish(hhanld);
	
	system("pause");
	return 0;

以上是关于创建可执行进程(windows)在win10下的表现的主要内容,如果未能解决你的问题,请参考以下文章

win10x64下的redis安装与使用

动态加载并执行Win32可执行程序

在Windows下多进程的实现?

10. Docker 安装与配置

window创建执行job的计划任务

Win 10 应用开发在App所在的进程中执行后台任务