2

PDFSharp を使用して PDF を作成しています。彼らの例では、PDF を保存してから、それを開くビューアーを選択するプロセスを開始します。次のようになります。

document.Save(fileName);
Process.Start(fileName);    

私のテストでは、Acrobat Reader が既に開いている場合、プロセスが既に実行されているため、i/o 例外が発生することがわかりました。だから私はこの投稿に従ってみました: Detecting a Process is already running in windows using C# .net

プロセスの検出について。そこで、上記のコードを次のように変更しました。

        document.Save(fileName);
        if (System.Diagnostics.Process.GetProcessesByName("AcroRd32.exe").Length == 0)
        {
            Process.Start(fileName);    
        }

そこで、質問が 2 つあります。
1) これは機能しません。長さは常に 0 なので、間違ったプロセスを返しているのか、それともプロセスが見つからないのか疑問に思っています。タスク マネージャーを見ると、AcroRd32.exe が実行中のプロセスの名前です。

2) これを行うためのより良い方法はありますか? このプロセスをコードにハードコーディングしているようで、Acrobat の他のバージョン (64 ビット バージョンがある場合など) や他の PDF ビューアー全般をキャッチするより良い方法があるかどうかはわかりませんでした。

これが初心者の質問である場合は申し訳ありません。この .NET は私にとってかなり新しいものです。ありがとう。

4

2 に答える 2

3

これは本当に良い情報源であり、あなたが求めていることすべてをカバーしています.

上記のリンクから抜粋した小さなサンプル コードを次に示します。

Process[] collectionOfProcess = Process.GetProcessesByName("AcroRd32");
            if (collectionOfProcess.Length >= 1)
            {
                Process acrProcess = collectionOfProcess[0];
                
                MessageBox.Show(acrProcess.MainWindowTitle);// file name of the which is opened.

                MessageBox.Show("Acrobet reader running");
            }

さらに、プログラムがその上にあるアクセス許可のプロセスを検出できない、または「動作」できない場合も見てきました。Adobe Reader が管理者権限で実行されていないことを確認してください。管理者権限で実行されている場合は、プログラムも実行されていることを確認してください。

お役に立てれば!

于 2013-01-11T00:32:58.043 に答える
0

Acrobat Reader を起動しようとする代わりに、作成したばかりの PDF ファイルのファイル パスを に渡すと、Windows はファイル拡張子Process.Startに関連付けられたデフォルトのアプリケーションで PDF を開きます。.pdfインストールされているリーダーを知る必要さえありません。リーダーがインストールされていない場合、Windows はユーザーに、リーダーを開くアプリケーションを選択するように求めます。これは、ユーザーの好みのリーダーで PDF ファイルを開くため、Acrobat Reader を直接起動するよりも優れたオプションです。

これがあなたがすでに行っていることである場合(質問からだと思います)、生成されたPDFファイルがまだPDFSharpまたはコードで開いているため(つまり、何かがロックされているため)、IO例外が発生する可能性が最も高くなります。 Acrobat Reader で開くことができません。すでに実行中のプロセスを開始しても、そのエラーは発生しません。

于 2013-01-11T00:32:18.510 に答える