如何在 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++ 中不被识别为内部或外部命令、可运行程序或批处理文件