读书人

在一个历程中运行另一个进程

发布时间: 2013-08-10 21:14:06 作者: rapoo

在一个进程中运行另一个进程
如何实现:在程序运行过程中,加载并运行另外一个进程。

使用 LoadLibrary 可以加载一个 exe 文件到进程的地址空间中,指定的 exe 文件被加载到地址空间中后,LoadLibrary 返回了一个句柄,能否利用 LoadLibrary 返回的这个句柄,来运行另外一个 exe 文件?

对于LoadLibrary函数的描述,下面是 MSDN 的原话:
LoadLibrary can also be used to map other executable modules. For example, the function can specify an .EXE file to get a handle that can be used inFindResource orLoadResource. Do not use LoadLibrary to "run" a .EXE file.

问题求解: 如何在一个进程中,运行另外一个 exe 文件?(或者说控制 另外一个进程的 运行)
[解决办法]
我看到有个网友这么解释的,觉得讲的非常好:
CreateProcess 函数

这个函数返回的

typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;

这里有个 hProcess句柄,你调用

WaitForSingleObject(xx.hProcess, INFINITE);

就可以实现等待到程序退出,才继续执行。

大致示例代码:

CreateProcess(..., &pi);

WaitForSingleObject(pi.hProcess, INFINITE);

然后是你需要继续执行的代码。

读书人网 >C++

热点推荐