如何在 C++ 中运行外部可执行文件 (.exe)

Posted

技术标签:

【中文标题】如何在 C++ 中运行外部可执行文件 (.exe)【英文标题】:How to run external executable (.exe ) in C++ 【发布时间】:2011-05-11 14:43:07 【问题描述】:

我不是开发人员。我们希望(我和我们的团队)用 C++ 编写一个可以打印 PDF 的工具(将 PDF 发送到打印机)。我们尝试使用外部工具,例如命令行 pdfprint.exe,使用 CreateProcessW 和 cmd /c,但我们遇到了问题。对于 Windows XP,我们的工具没有问题,对于 Windows Vista,我们有问题,我们无法使用像 pdfprint.exe 这样的工具。

Windows XP 和 Vista 在使用 CreateProcessW 和“cmd /c”在另一个程序中启动外部工具方面存在差异?

谢谢

奥龙佐

【问题讨论】:

你为什么还要做 "cmd /c" ?你应该能够摆脱那部分。 我们将运行外部工具(打印PDF的工具pdfprint.exe)并退出 你试过检查返回值吗? 【参考方案1】:

有很多方法可以从 C++ 程序运行外部应用程序。我会在下面数一数。

    Win32API CreateProcess 函数。 Cédric Julien 给出了使用示例。 exec* C/C++ 函数系列。它们在 POSIX 标准中定义。所以它们在 Linux 上是一样的。但由于在新版 MSVC 中已弃用,请尝试使用类比 _exec* 函数。 WiNT 本机 API 调用 - NtCreateProcess。它也在 CreateProcess 中被调用 :-) 这个函数代表了更深层次的 API。通过使用 Native API 调用,您可以编写小而简单的应用程序,因为您将减少程序与外部库的依赖关系。但也存在问题:原生 API 绑定到操作系统版本,因此无法保证下一个操作系统版本中的原生 API 会相同。

您可以尝试每个。请注意,最好在每次调用这些函数时指出可执行文件的完整路径。此外,您必须对 pdfprint.exe 具有读取/执行权限(权限)。如果您没有执行外部工具的唯一方法是使用管理权限运行您的 C++ 程序。如果您右键单击程序的 exe 文件并选择“以管理员身份运行”菜单元素,则可以这样运行它。

【讨论】:

【参考方案2】:

As described here,你应该使用这样的东西:

LPTSTR szCmdline = _tcsdup(TEXT("C:\\Program Files\\....\\pdfprint.exe -args-you-need"));
CreateProcess(NULL, szCmdline, /* ... */);

【讨论】:

谢谢,但我想知道在 XP 或 Vista 或 Seven 上运行 CreateProcess 是否有一些区别,因为在 XP 上我们没有问题。在 VISTA 上,我们在使用 CreateProcessW 时遇到问题。你有什么建议吗?

以上是关于如何在 C++ 中运行外部可执行文件 (.exe)的主要内容,如果未能解决你的问题,请参考以下文章

vs2015写c++不是内部或外部命令,也不是可运行的程序或批处理文件

exe 文件在 C++ 中不被识别为内部或外部命令、可运行程序或批处理文件

如何在 azure app 服务中使用 cl.exe 编译 c++ 代码并生成可执行文件

通过 C++ 运行外部 .exe

c++打开外部exe并输入指令

易语言,如何在程序内部调用外部的exe文件,让外部的exe文件运行在易语言程序内。