ファイルをプリンタに送信するプロセスを開始する必要があるWindowsサービスがあります(その解決策が見つかりました。https://stackoverflow.com/a/4875755/1228738)。私はProcess.Start()を使ってこれを行います。 私の問題は何も起こらないということです。Windowsサービスでプロセスを実行して印刷する
サービスは実際に私の開発マシン(win7、x64)にインストールされています。毎回同じ結果を出してLOCAL SYSTEM、NETWORK SERVICE、LOCAL SERVICEとしてインストールしようとしました。
は、私は私のプロセスを開始するこれらの方法を試してみました:Process p = new Process();
p.StartInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe";
p.StartInfo.Arguments = "-p myFile.pdf";
p.Start();
と
Process.Start("C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe", "-p myFile.pdf");
とも
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "C:\\Program Files (x86)\\Foxit Software\\Foxit Reader\\Foxit Reader.exe";
startInfo.Arguments = "-p myFile.pdf";
Process.Start(startInfo);
私はWinフォームアプリケーションで同じコードを実行し、すべての作品ファイルがプリンタに送信されます。しかし、Windowsサービスでは何も起こりません。
私は投稿https://stackoverflow.com/a/6271309/1228738を見ました。これはなぜUIが表示されないのかを説明していますが、とにかくUIはありません。しかし、コメントのセクションで述べたように、ユーザー入力のないプロセスはOKでなければなりません。私が始めたプロセスは、ユーザー入力を必要としません。
セッションアイソレーション(https://stackoverflow.com/a/5063750/1228738)のために、サービスはインストールされているプリンタを見つけることができません。それは可能でしょうか?もしそうなら、それを回避する方法はありますか?そうでない場合は、何が間違っているのか考えてみてください。
ありがとうございます!私は自分のユーザーアカウントでサービスを実行してみました、それが働いているので、私は私の恐怖が確認されていると思います
EDIT#1
...ユーザーローカルシステムとネットワークサービスが一切インストールされたプリンタを持っていません。
私は少し質問を洗練します。それらのアカウントがコンピュータにインストールされているプリンタにアクセスする方法はありますか?我々は最終的に、ユーザーがそのサービスを実行するために、我々は印刷するにプリンタをインストールします、そのユーザーのアカウントに作成されることが決定
EDIT#2
。
私はこの質問を今閉じられると思います。 ご協力いただきありがとうございます。
アプリケーションが印刷ダイアログを表示しようとしていますが、セッションが非対話型である(アプリケーションイベントログを確認している)場合や、サービスが実行されているユーザーにプリンタがないため設定されます。サービスが(可能であれば)実行され、プリンタを設定するユーザとしてログインすることができます。 –
winformアプリケーションで全く同じコードを実行すると、ファイルは印刷ダイアログなしでプリンタに送信されるので、サービスから同じ動作が期待されます。あなたの提案に似たものを試してみて、自分のユーザーアカウントでサービスを実行し、それがそのように機能しているかどうかを確認します。ありがとう – Fid
また、myFile.pdfはどこにありますか?サービスはそのパスにアクセスできますか? – roymustang86