本記事はマイクロソフト社員によって公開されております。
セッション 0 における印刷の留意事項
多数いただくお問い合わせの中で、セッション 0 における印刷実施に関するお問い合わせをお受けする事がございます。
本ブログでは、セッション 0 における印刷に関する留意事項についてご紹介をさせていただきます。
セッション 0 とデスクトップの関係について
- サービスプログラムは セッション 0 で動作します。
- セッション 0 にはデスクトップが存在しないため、デスクトップにアクセスするプログラムは正常に動作しません。
デスクトップにアクセスするプログラムの判断基準の一つとして、USER32
や GDI32
の API の利用が挙げられます。
これらの API は以下のような用途があります:
- ウィンドウの表示
- デスクトップ上のウィンドウへの描画
これらは デスクトップの存在を前提とした構造 になっており、セッション 0 での利用は推奨されません。
サービスプログラムが GDI+
や .NET Framework
を使っていても、最終的には GDI32
API が使用されます。
デスクトップが存在することを前提とした処理が行われる事で、致命的な問題が発生する可能性がございます。
また、デスクトップにアクセスをしないまでも、デスクトップが存在するセッションで動作する場合と比較し、
遅延する等、ご期待とされる動作に至らない可能性もございます。
デスクトップが存在するセッションで同一の処理を行うプログラムを実行しても問題が発生しない場合、
上述した留意事項に該当している事が考えらられます。
回避策と注意点
- 回避策: デスクトップが存在するセッションでプログラムの実行が必要となります。
- 注意点: プログラムの提供元様の自助努力により前述した留意事項が顕在化しない場合がございます。
本ブログにて言及差し上げた API の利用を禁止するものではありませんが、該当 API をセッション 0
での利用を推奨したり、サポートするものではない事をご留意いただければ幸いです。