0

私は開発者ではありません。私たち (私と私たちのチーム) は、PDF を印刷できるツール (Send a PDF to printer) を C++ で作成したいと考えています。CreateProcessW と cmd /c を使用して、コマンド ライン pdfprint.exe などの外部ツールを使用しようとしましたが、問題が発生しました。Windows XP ではツールに問題はありませんが、Windows Vista では問題があり、pdfprint.exe などのツールを使用できません。

CreateProcessW と "cmd /c" を使用して別のプログラム内で外部ツールを起動するには、Windows XP と Vista で違いがありますか?

ありがとう

オロンゾ

4

2 に答える 2

1

C++ プログラムから外部アプリケーションを実行するには、多くの方法があります。以下にそれらを数えます。

  1. Win32API CreateProcess関数。Cédric Julien が使用例を示しました。
  2. exec* C/C++ 関数ファミリー。それらは POSIX 標準で定義されています。したがって、それらは Linux でも同じです。ただし、新しいバージョンの MSVC では非推奨になっているため、類似の _exec*関数を使用してみてください。
  3. WiNT ネイティブ API 呼び出し - NtCreateProcess。CreateProcess でも呼び出されます :-) そして、この関数はより深いレベルの API を表します。ネイティブ API 呼び出しを使用すると、外部ライブラリとのプログラムの依存関係が少なくなるため、小さくて単純なアプリケーションを作成できます。ただし、ネイティブ API は OS のバージョンにバインドされているため、次の OS バージョンでもネイティブ 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 に答える