gpt4 book ai didi

c# - 在 C++ 中使用 system() 来防止触发新进程的替代方法

转载 作者:行者123 更新时间:2023-11-28 08:07:46 25 4
gpt4 key购买 nike

我遇到了一个供我使用的 C++ 程序,其中使用一些文件和 exe 完成了一些处理。在我的 C++ 程序中,我有一个像这样的片段

system(exe1 exe2 > TestFile1.txt  exe3 > TestFile2.txt)
system(exe2 exe3 > TestFile3.txt exe3 > TestFile4.txt)
system(exe3 exe2 > TestFile5.txt exe3 > TestFile6.txt)
system(exe4 exe1 > TestFile7.txt exe3 > TestFile8.txt)

现在,我通过 P/Ivoke (Dllimport) 从这个 C++ 程序中生成了一个 .dll 用于我的 C# 应用程序,但是因为 C++ 有这些 system 正在使用,当我在我的 C# 程序中使用此 .dll 时,它会触发不同的进程和新的 cmd 窗口。

我想通过生成所有 exe(exe1、exe2、exe3 等)的 dll 并从这些 dll 中触发主要功能来摆脱这个问题,但我并没有想到我将如何做到这一点在 C++ 程序中?

我可以从 C++ 导出主函数(exe1 dll、exe2 dll、exe3 dll 等)并通过 C# P/Invoke 调用它,但我想要 C++ 的替代方案。替换上面的 4 行代码片段。怎么办?

最佳答案

您可以在不打开控制台窗口的情况下启动进程(包括那些以文本模式运行的进程)。请不要在细节上让我失望,因为自从我上次这样做以来已经很久了(在 Windows 上,我在 *nix 系统上定期这样做)。我可以告诉您的是,您必须查看函数 CreateProcessEx。您还必须重新实现 stdout 到这些文本文件的重定向。

我强烈建议不要将这些进程放入 DLL 中,因为那样它们会运行到您的主进程地址空间并且把事情搞砸(顺便说一句:您可以像加载 DLL 一样加载 EXE,但是调用它们的入口函数会阻塞你的主进程,所以不要这样做)。

关于c# - 在 C++ 中使用 system() 来防止触发新进程的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com