PDFを印刷する非対話型プロセスを作成しようとしていますが、Windows Server 2008(およびVista / 7)でこれを構築する方法についてアドバイスが必要です。
以前は、ディレクトリ内のすべてのPDFを印刷するスケジュールされたタスク(ユーザーアカウントがログオンしているかどうかに関係なく実行するように設定)がありました。(別のプロセスでPDFがディレクトリに移動します。)実行時に、別のプロセス(AdobeReaderまたはFoxitReader)を起動してPDFを印刷します。AdobeReaderとFoxitReaderはどちらもサイレント印刷を備えているため、スケジュールされたタスクが実行されたユーザーのデフォルトのプリンターにすべてが送信されます。UIは生成されず、すべてのファイルが問題なく印刷されます。これはServer2003で機能しました。
このプロセスはServer2008では機能しなくなりました。完全にはわかりませんが、これはセッション0の分離に関係していると思います。これを証明することはできません。ただし、 「ユーザーがログインしているときにのみ実行する」と設定すると、プロセスはスケジュールされたタスクとして機能すると言えます。これが機能している間、ユーザーはマシンにログインする必要があり、したがって私の要件を満たしていません。(私の最初の手がかりは、この前の質問にありました。)
私はこれをどのように進めることができるかを判断できません。要件を満たす方法はありますか?
いくつかのメモ:
私が見たすべての解決策は、ログインしたユーザーの資格情報を使用しているようです。上でリンクした質問を参照してください-リストされている解決策は、ログインしているユーザーのトークンを取得し、それを使用してプログラムを実行しているようです。(GetCurrentUserToken()プロシージャを見てください-戻り値は後でAPI呼び出しCreateProcessAsUser()で使用されます。)
私の現在のプロセスでは、私が知る限り、UIは生成されません。ProcMonを使用して、リーダープロセス(AdobeまたはFoxit)が正しく印刷され、印刷ドライバー自体に問題があるように見えることを確認しました。これは、print-to-fileドライバーを使用する試みによってバックアップされます。print-to-fileドライバーは3つの目に見えるステップで実行され、2番目を開始せずにすべてのファイルの最初のステップを明確に終了します。では、セッション0の分離はプリンタードライバーにどのように影響しますか?これは私にはわかりません。(この件に関して私が見つけることができる最高のドキュメントは、印刷スプーラーがセッション0で実行されている場合でも、プリンタードライバーが影響を受ける可能性があることのみを示しています。)
プロセスで[サービスにデスクトップとの対話を許可する]がオンになっている場合でも、Windowsサービスとしての印刷は機能しません。
ぼやけを誘発するテキストの壁の効果に対抗するために太字のテキストが追加されました。