调用 CreateProcess() 并获取字符串的返回值

     2023-02-16     258

关键词:

【中文标题】调用 CreateProcess() 并获取字符串的返回值【英文标题】:Call CreateProcess() and get return value of a string 【发布时间】:2020-02-18 20:02:17 【问题描述】:

我有一个 C++ 应用程序,它调用一个用 C# 编写的 EXE,它获取一些信息,我想将它作为字符串传回给调用 C++ 应用程序。

所以我的问题是,“是否可以从使用 CreateProcess() 调用的 EXE 中获取字符串数据的返回值?

我希望我在这里没有违反任何“提问”礼仪。

【问题讨论】:

【参考方案1】:

如果 C# 应用程序将其数据输出到 STDOUT 或 STDERR,则 C++ 应用程序可以在调用 CreateProcess() 时通过重定向 STDOUT/STDERR 来捕获它。有关详细信息和示例,请参阅 MSDN 上的 Creating a Child Process with Redirected Input and Output。

【讨论】:

【参考方案2】:

不用担心,Jeff 是的,有一种方法可以通过 EXE 从一个到另一个获取数据。

您要做的是将 C# 应用程序中的输出写入标准输出。

Console.WriteLine("Your message here.");

基本上,如果您运行 C# 控制台应用程序并将数据打印到屏幕上,那么所有数据都可以在您的 C++ 应用程序中读取。

在您的 C++ 程序中,您需要从标准输入中读取数据。

它可能看起来像这样:

#include <iostream>
#include <string>

int main() 
    // Your code to run the application in a background process

    for (std::string line; std::getline(std::cin, line);) 
        std::cout << line << std::endl;
    

    return 0;

您打破的唯一规则是没有提供足够的细节或代码来更具体地了解解决方案。但是,如果您需要更多帮助,请提供更多详细信息。编码愉快!

如果您需要,这里是有关 c# 代码的更多信息的链接:https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.standardoutput

【讨论】:

【参考方案3】:

我看不到另一个进程如何返回字符串。进程不返回任何内容,它们只是运行。

您可以引用(或链接)某些 DLL 或 EXE,然后调用返回字符串的方法。但这将在您自己的进程中运行,而不是启动另一个进程。

请参阅:Calling C# .NET methods from unmanaged C/C++ code(代码项目)。

【讨论】:

“进程不返回任何内容,它们只是运行” - 不。进程在退出时会向操作系统返回状态码。 main 返回int 是有原因的。 操作系统需要int 返回码。如果您控制 .NET 部分,那么您将创建一个 DLL(即,类库),而不是 EXE。如果您无法控制,那么您将无法更改返回码,并且返回码对您来说只是一个副作用,而不是您期望的结果。但我们确实应该详细了解这个其他应用程序的作用。 @Oliver Jacot-Descombes C# 程序执行 WebResquests 并捕获响应,在这种情况下,它会检查许可证是否在我的网站上处于活动状态。如果它处于活动状态,它会将许可证信息发送到我的 C++ 应用程序,由它处理它,并确定它是否有效并应该启动。

我可以访问从 Delphi CreateProcess 命令返回的字符串吗?

】我可以访问从DelphiCreateProcess命令返回的字符串吗?【英文标题】:CanIaccessthestringreturnedfromaDelphiCreateProcesscommand?【发布时间】:2008-12-0510:51:19【问题描述】:我正在使用Win32CreateProcess函数来执行对外部可执行文件的调用。可执... 查看详情

windows下在进程中使用createprocess创建一个窗口进程,并获取这个窗口hwnd句柄(代码片段)

windows下在一个进程中使用createprocess创建一个窗口进程,并获取这个窗口的HWND句柄C++使用createprocess创建一个窗口进程,并获取这个窗口的HWND句柄。主要思路是:定义getDwProcessId函数,用于监听创建子窗口的活动。定义EnumWindowsPro... 查看详情

使用 CreateProcess 调用 nvcc.exe

】使用CreateProcess调用nvcc.exe【英文标题】:Invokingnvcc.exeusingCreateProcess【发布时间】:2013-03-1804:17:29【问题描述】:我们目前为CUDA使用模拟JIT编译器,其中对某些文件调用nvcc.exe并生成生成的.ptx文件。boolexecuteWindowsProcess(ofstream&am... 查看详情

为啥 ::CreateProcess(path,cmd,...) 失败并出现错误“找不到文件”?

】为啥::CreateProcess(path,cmd,...)失败并出现错误“找不到文件”?【英文标题】:whydoes::CreateProcess(path,cmd,...)failwitherror"Filenotfound"?为什么::CreateProcess(path,cmd,...)失败并出现错误“找不到文件”?【发布时间】:2011-06-2222:58:24... 查看详情

在 CreateProcess 之后调用 GetModuleFileNameEx 时出现 ERROR_INVALID_HANDLE

】在CreateProcess之后调用GetModuleFileNameEx时出现ERROR_INVALID_HANDLE【英文标题】:ERROR_INVALID_HANDLEwhencallingGetModuleFileNameExafterCreateProcess【发布时间】:2014-07-2111:23:42【问题描述】:在成功调用CreateProcess后,我尝试使用GetModuleFileNameEx获... 查看详情

不直接使用字符串时CreateProcess@Unhandled异常

】不直接使用字符串时CreateProcess@Unhandled异常【英文标题】:CreateProcess@Unhandledexceptionwhennotusingdirectlyastring【发布时间】:2013-04-0221:35:29【问题描述】:我正在尝试使用CreateProcess打开游戏.exe,但我遇到了未处理的异常错误。我已... 查看详情

为啥不能从 DllMain 函数调用 CreateProcess?

】为啥不能从DllMain函数调用CreateProcess?【英文标题】:WhyCreateProcessmustnotbecalledfromaDllMainfunction?为什么不能从DllMain函数调用CreateProcess?【发布时间】:2014-11-0509:50:36【问题描述】:我在几个来源中读到过,CreateProcess不能从DllMai... 查看详情

在 CreateProcess 之后修改 STARTUPINFO

】在CreateProcess之后修改STARTUPINFO【英文标题】:ModifySTARTUPINFOafterCreateProcess【发布时间】:2015-09-0209:50:43【问题描述】:我希望能够更改STARTUPINFO的值,就在CreateProcess被调用(暂停)之后。因此,新的远程/子进程一启动就可以获... 查看详情

使 CreateProcess 继承调用进程的控制台

】使CreateProcess继承调用进程的控制台【英文标题】:MakingCreateProcessinherittheconsoleofthecallingprocess【发布时间】:2008-12-0412:02:06【问题描述】:当我在Windows中调用CreateProcess时,新进程似乎没有继承调用进程的控制台。我制作了一... 查看详情

CreateProcess .. WaitForSingleObject .. CloseHandle 调用的最佳 try..finally 位置

】CreateProcess..WaitForSingleObject..CloseHandle调用的最佳try..finally位置【英文标题】:Optimaltry..finallyplacementforCreateProcess..WaitForSingleObject..CloseHandlecalls【发布时间】:2015-05-0213:57:09【问题描述】:我想在调用CreateProcess..WaitForSing 查看详情

如何在 C# 中通过 lpEnvironment 调用 CreateProcess()

】如何在C#中通过lpEnvironment调用CreateProcess()【英文标题】:HowtocallCreateProcess()inC#passinglpEnvironment【发布时间】:2014-08-1720:43:50【问题描述】:我将原生CreateProcess导入到我的C#项目中用于ICorDebug目的http://msdn.microsoft.com/en-us/library/vs... 查看详情

如何在 Delphi Prism 中调用函数 CreateProcess?

】如何在DelphiPrism中调用函数CreateProcess?【英文标题】:HowtocallfunctionCreateProcessinDelphiPrism?【发布时间】:2010-04-2514:22:45【问题描述】:我写的functionCreateProcess(lpApplicationName:String;lpCommandLine:String;lpProcessAttributes:IntPtr;lpThr 查看详情

cmd.exe 在使用 CreateProcess 调用后立即关闭

】cmd.exe在使用CreateProcess调用后立即关闭【英文标题】:cmd.exeimmediatelyclosesaftercallingwithCreateProcess【发布时间】:2018-02-2415:55:32【问题描述】:我正在尝试使用CreateProcess函数执行批处理文件,但是cmd.exe立即关闭,而没有打开正在... 查看详情

如何使用 CreateProcess 函数正确调用“telnet”?

】如何使用CreateProcess函数正确调用“telnet”?【英文标题】:Howcorrectlycall"telnet"withCreateProcessfunction?【发布时间】:2019-05-0421:49:48【问题描述】:我想通过cmd.exe启动“telnet”并将这个命令的执行结果写入文件。当我运行... 查看详情

被粘滞键调用时 CreateProcess 访问被拒绝

】被粘滞键调用时CreateProcess访问被拒绝【英文标题】:CreateProcessAccessDeniedwheninvokedbystickykeys【发布时间】:2014-03-2522:37:31【问题描述】:我的程序被设计成一个安全的粘滞键破解。如果从登录中调用粘滞键,它将要求输入本地... 查看详情

如何为两个单独的 CreateProcess() API 调用打开单独的命令提示符控制台

】如何为两个单独的CreateProcess()API调用打开单独的命令提示符控制台【英文标题】:HowtoopenseparatecommandpromptconsolesfortwoseperateCreateProcess()APIcalls【发布时间】:2014-12-0509:27:11【问题描述】:我有一个caller.EXE,我在其中执行了2次这... 查看详情

如何使用 CreateProcess 调用 tshark 将捕获文件转换为 txt

】如何使用CreateProcess调用tshark将捕获文件转换为txt【英文标题】:HowtocalltsharktoconvertacapturefiletotxtwithCreateProcess【发布时间】:2019-11-2513:26:50【问题描述】:我正在尝试从用VisualStudio编译的c++程序调用tshark。有些电话有效,但有... 查看详情

对于每个 CreateProcess,首先调用我的函数 [关闭]

】对于每个CreateProcess,首先调用我的函数[关闭]【英文标题】:ForeveryCreateProcess,callmyfunctionfirst[closed]【发布时间】:2016-09-0123:16:20【问题描述】:我的想法是,为每个将要创建的新进程创建一个弹出窗口,这样我就可以确定只... 查看详情