0

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

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

谢谢

奥龙佐

4

2 回答 2

1

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

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

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

于 2011-06-12T18:24:18.583 回答
0

如此处所述,您应该使用以下内容:

LPTSTR szCmdline = _tcsdup(TEXT("C:\\Program Files\\....\\pdfprint.exe -args-you-need"));
CreateProcess(NULL, szCmdline, /* ... */);
于 2011-05-11T15:03:33.370 回答