如何在 Windows ( C++ ) 中创建进程以运行另一段代码?

Posted

技术标签:

【中文标题】如何在 Windows ( C++ ) 中创建进程以运行另一段代码?【英文标题】:How to create process in Windows ( C++ ) to run another section of code? 【发布时间】:2020-04-26 09:08:38 【问题描述】:

我正在尝试在一个简单的 cpp 程序中创建一个进程,并希望在此进程中运行来自不同源文件的另一段代码。我找到了适用于 Windows 的CreateProcess API,它允许我们创建进程,但它似乎只需要执行 exe 文件。有没有办法在windows中创建一个进程并提供一个函数等来由它执行,类似于线程?

PS:我不是在寻找基于线程的解决方案,因为我想用进程和共享内存测试一些东西。

【问题讨论】:

【参考方案1】:

有没有办法在windows中创建一个进程并提供一个类似于线程的函数等由它执行?

没有。但是你可以做的是让你的程序运行另一个自己的副本,传递命令行参数告诉它需要做什么。您可以使用GetModuleFileName() 获取当前进程的EXE 文件的完整路径。然后,在您的main()/WinMain() 中,如果存在任何命令行参数,则运行相应的函数然后退出,否则正常运行您的主逻辑。

【讨论】:

感谢您的工作。虽然这解决了我目前的目的,但我很好奇这是如何完成的。例如,Chrome 在主进程之后启动了几个进程,并且安装目录不包含任何 exe 文件,以便在这些进程中运行代码。我想知道是否有办法复制相同的行为。 @SuryaPrakash 如果您查看进程管理器,您可能会发现 chrome 会启动同一个可执行文件的多个副本,但根据所需的功能具有不同的命令行参数。 @SuryaPrakash 使用命令行参数是向新进程发送命令的最简单方法,但它肯定不是唯一的方法。有许多可用的 IPC(进程间通信)机制。但是,是的,它们通常源于为每个进程使用相同的 EXE 文件以保持代码管理简单

以上是关于如何在 Windows ( C++ ) 中创建进程以运行另一段代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 或 Qt 中创建进程?

[C++]-Linux中创建Daemon程序

如何使用 C++ 在 Windows 中创建守护线程?

在 C++ 中创建 Windows 共享库时如何实现接口隔离

如何在 Visual Studio 2017 中创建 C++ Windows 桌面应用程序?

如何在 c++ 中创建一个适用于 Windows 和 linux 的文件夹(目录)[重复]