1

CreateProcessAdobe Acrobat Reader を実行して PDF ファイルを表示するために使用しています。そのアプリケーションを閉じたいと思います。アプリケーションを閉じようとしTerminatePocessています。アプリケーションのインスタンスが 1 つしか実行されていない場合は、問題なくTerminateProcess動作します。ただし、複数のインスタンスが実行されている場合、閉じられません。PDF ファイルがプログラムの外部で開かれ、プログラムが Acrobat Reader を実行して別のファイルを開く場合、開いたTerminateProcessリーダーが閉じません。

私は使っている:

result = CreateProcess(NULL, LaunchExeCharString, NULL, NULL, FALSE, bWait ? HIGH_PRIORITY_CLASS : NULL, NULL, WorkingPathName, &StartupInfo, &ProcessInformation);

LaunchExeCharStringリーダーの名前 (AcroRd32.exe) はどこにありますか。

StartupInfoは次のとおりです。

StartupInfo.cb              = sizeof(STARTUPINFO);
StartupInfo.lpReserved      = NULL;
StartupInfo.lpDesktop       = NULL;
StartupInfo.lpTitle         = NULL;
StartupInfo.dwX             = 0;
StartupInfo.dwY             = 0;
StartupInfo.dwXSize         = 0;
StartupInfo.dwYSize         = 0;
StartupInfo.dwXCountChars   = 0;
StartupInfo.dwYCountChars   = 0;
StartupInfo.dwFillAttribute = 0;
StartupInfo.dwFlags         = STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow     = RunMode;
StartupInfo.cbReserved2     = 0;
StartupInfo.lpReserved2     = NULL;
StartupInfo.hStdInput       = NULL;
StartupInfo.hStdOutput      = NULL;
StartupInfo.hStdError       = NULL;

それから私は使用します

TerminateProcess(ProcessInformation.hProcess, 0);

私が言ったように、別の PDF ファイルが開いている場合、TerminateProcess は acrord32.exe のインスタンスを終了しません。acrord32を実行したのは私だけだった場合にのみ機能します。

4

2 に答える 2

3

CreateProcess()HANDLE直接作成したプロセスのみを提供できます。場合によっては、アプリが独自の別のプロセスを起動して作業を行ったり、情報 (渡されたファイル名など) を別の実行中のプロセスに渡して終了したりすることがあります。これらの種類の動作は、アドビが内部で行っていることである場合、あなたが見ている症状を説明するでしょう.

于 2013-01-24T22:17:16.257 に答える
0

了解しました。AdobeReaderのインスタンスを起動すると、ユーザーがPDFコンテンツを読み取ります。しかし、リーダーがいつ閉じることになっているのかを誰が決めるのですか?上記のアプリケーションをいつ終了するかをエンドユーザーに決定させます。アプリケーションが閉じる前に数秒/分待っていますか?これは悪い設計です。Close Adobe Readerアプリケーションを閉じる必要があるときに、アプリケーションのオプション(ボタンなど)をユーザーに提供していますか?これは適切なオプションではありません!

アプリケーションを起動するだけの場合はShellExecute、またはを使用して目的のファイルShellExecuteEx開く必要があります。OS(つまりシェル)は、特定のファイルを開く方法を決定します。Program FilesAdobe Readerがインストールされている場所(内、または内)をどのように確認しますかProgram Files (x86)。どのバージョンのReaderがインストールされていますか?また、ワードプロセッサやメディアプレーヤーなど、他のアプリケーションについてはどうでしょうか。非常に特殊なプログラムを使用してファイルを開くのは誰ですか。また、そのようなプロセスをいつ終了するかを決定します。

それ以上に、アプリケーションは他のプロセスを生成する可能性があります-すべての子プロセスを(プロセスツリーの下で)閉じますか?

于 2013-01-26T12:39:32.713 に答える