2011-12-07 5 views
3

私は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。

+1

サービスとして実行されているユーザーは?プリンターは、サービスがオンになっているボックスにローカルに印刷しようとしていますか、それともネットワークプリンターですか? – user957902

+0

出力をリダイレクトしていますが、出力をリダイレクトしていません。プログラムをデッドロックさせ、誰かがその出力を軽減するのを待つだけで十分です。ただリダイレクトしないでください。 –

答えて

2

あなたは、デフォルトではLocalSystemアカウントをあなたのサービスを実行していますか?プリンタにアクセスできない可能性があります。

FoxitReaderで正常に印刷できるサービスを実行してアカウントを変更し、そのサービスが動作するかどうかを確認してください。 Windowsサービスコントロールパネルアプレットからサービスを設定するときに、[ログオン]タブを変更します。 http://www.powershellinside.com/kb/articles/powershellssh-useraccounts-1.jpg

+0

こんにちは、CoreTech。はい、私のサービスはte LocalSystemアカウントで実行するように設定されています。 – t3b4n

+0

これをユーザーアカウントに設定して、それが機能するかどうか確認できますか? (プリンタにアクセスできるアカウントです) – CoreTech

+0

ありがとう!ユーザーに関連するトラブルでした。ユーザーアカウントを自分のユーザーに変更すると、プロセスが開始される可能性があります。 – t3b4n

4

ファイル名の代わりにファイルの完全修飾名が必要です。サービスの既定のパスはC:\ Windows \ System32(または使用するOSによって異なります)に設定されています。

変更この行:これまで

proc.StartInfo.FileName = "FoxitReader.exe"; 

(またはそれが常に固定パスであればそれをハードコーディング):

proc.StartInfo.FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "FoxitReader.exe"); 
+0

あなたの答えをありがとう、ラッセル、私は自分のコードに変更を加えましたが、まだ印刷されていません。 – t3b4n

+0

実際に適切な実行可能ファイルを実行していると確信した場合は、標準出力とエラーをキャプチャして、その内容を確認する必要があります。 –

関連する問題