私の問題は次のとおりです。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 に変更しましたが、話していたウィンドウが表示されなくなりました。狂ったコードはありません...少なくともまだ..