1

私の問題は次のとおりです。ghostscript を使用して一部の pdf を jpeg ファイルに変換し、それらを Silverlight コントロールにレンダリングしています。私は以下を使用してpdfファイルを変換しています:

public void PdfToJpg(string ghostScriptPath, string input, string output) {
            timer1.Enabled = true;
            //if the pdf has more than 1 file (ex. 3) then 3 jpeg files will be outputed 
            String ars = "-dNOPAUSE -sDEVICE=jpeg  -r300 -o" + output + "-%d.jpeg  " + input;
            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = ars;
            startInfo.FileName = ghostScriptPath;
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;            
            using (Process exeProcess = Process.Start(startInfo)) {
                exeProcess.WaitForExit();
            }           
        }

次に、ページ番号とページ byte[] をディクショナリに保存し、ディクショナリをセッションで保存し、Silverlight 対応サービスで送信し、Silverlight コントロールを含む aspx ページに送信します (Response.redirect(page.aspx) を使用)。 . すべて正常に動作しますが、サーバー (Cassini または IIS) がクラッシュすることがあります。つまり、ファイルは変換されますが、リダイレクトは発生せず、単にページが読み込み状態のままになります。「プロセスの終了」でcassiniを閉じるか、IISサーバーを再起動して、プロセスが再び機能するようにする必要があります。Silverlight アプリケーションに 1 バイトのオーディオ ファイルを送信する同様のプロセスがあり、すべてが正常に機能するため、問題はサービスにあるとは思いません。サーバーが停止することはありません。 ., 誰かアイデアがあれば. また、私はelmahを使用していますが、エラーは報告されていません...そして、デバッグ中にプロセスの変換やその他の部分を含むビューボタンをクリックすると、クリックイベントには入りませんが、変換は行われます(リダイレクトではありません) )、どうすればそれが可能になるのかわかりません...、ありがとう。確かにghostscriptを使ったものです

更新:コードを次のように変更しました:

     using (Process convertProc = new Process()) {
                convertProc.StartInfo.FileName = ghostScriptPath;
                convertProc.StartInfo.Arguments = args;
                //convertProc.StartInfo.UseShellExecute = false;
                //convertProc.StartInfo.RedirectStandardOutput = true;
                convertProc.StartInfo.CreateNoWindow = true;
                convertProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                convertProc.Start();
                ThreadedKill(convertProc.Id);
                convertProc.PriorityClass = ProcessPriorityClass.Normal;
                convertProc.WaitForExit();
                }

useshellexecuteとredirectoutputがコメントされている場合、サーバーは時々「ワイルド」になり、そうでない場合、コードは毎回完璧に実行されますが、これによりゴーストスクリプトプロセスからのウィンドウが表示されます。表示されないようにするには、この行にコメントを付けるか、useshellexecute を true にして、redirectoutput にコメントを付ける必要があります。私に何ができる?そして、redirectStandardOutputとは何か、それが何をするのか...、MSDNでは理解できません...

更新 2: コンソール アプリケーション用に gswin64.exe を gswin64c.exe に変更しましたが、話していたウィンドウが表示されなくなりました。狂ったコードはありません...少なくともまだ..

4

1 に答える 1