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

时间:2011-05-11 14:43:08

标签: printing windows-xp windows-vista cmd createprocess

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

在Windows XP和Vista之间使用CreateProcessW和“cmd / c”在另一个程序中启动外部工具有区别吗?

由于

Oronzo广场

2 个答案:

答案 0 :(得分:1)

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

  1. Win32API CreateProcess功能。 CédricJulien给出了使用示例。
  2. exec * C / C ++函数系列。它们在POSIX标准中定义。所以它们在Linux上是一样的。但由于在新版本的MSVC中不推荐使用它们,请尝试使用类比_exec*函数。
  3. WiNT Native API调用 - NtCreateProcess。它在CreateProcess中也被调用:-)而且这个函数代表了更深层次的API。使用Native API调用,您可以编写小而简单的应用程序,因为您将使用外部库创建程序的较少数量的依赖项。但是存在一些问题:本机API绑定到操作系统版本,因此在下一个操作系统版本中,Native API没有任何相同的保证。
  4. 您可以尝试各自。请注意,最好将每次调用这些函数指向可执行文件的完整路径。此外,您必须对pdfprint.exe具有读/执行权限(权限)。如果没有这种方法来执行外部工具就是运行具有管理权限的C ++程序。如果右键单击程序的exe文件并选择“以管理员身份运行”菜单元素,则可以这样运行。

答案 1 :(得分:0)

As described here,您应该使用以下内容:

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