私はPDFファイルを印刷するサービスを作成しました。 FoxitReaderをSystem.Processオブジェクトに呼び出し、コンソールコマンドを送信すると、サービスは何もしません。セッション0の隔離については読んだことがありますが、サービスではGUIアプリケーションが呼び出されず、実行可能ファイルでコマンドが実行されます。私のWindowsサービスが外部アプリケーションを実行できないのはなぜですか?
これは私のコードです:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "FoxitReader.exe";
proc.StartInfo.Arguments = " /t " + '"' + nombreArchivo + '"' + " " + '"' + nombreImpresora + '"';
EventLog.WriteEntry("InboundServicioImpresion", "Comando impresion:" + proc.StartInfo.FileName + proc.StartInfo.Arguments);
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();
注:FoxitReader.exeがサービスパッケージに含まれています。それはサービスと同じフォルダにインストールされています。
サービスでは、コードが実行する必要があり、クラッシュしたり、例外をスローしたりすることはありません(すべてのメソッドはtry-catchによって制御されます)。また、あるフォルダから別のフォルダにファイルを移動することもできます。唯一働かないのは、foxit、adobe readerまたはsumatraPDFで印刷することです。
なぜそれが機能しないのですか?
ありがとうございます、Esteban。
サービスとして実行されているユーザーは?プリンターは、サービスがオンになっているボックスにローカルに印刷しようとしていますか、それともネットワークプリンターですか? – user957902
出力をリダイレクトしていますが、出力をリダイレクトしていません。プログラムをデッドロックさせ、誰かがその出力を軽減するのを待つだけで十分です。ただリダイレクトしないでください。 –