印刷をする Windows サービス アプリケーション開発時の留意点

概要
Windows サービス アプリケーションはセッション 0 で動作するアプリケーションであり、セッション 0 で動作するアプリケーションからはユーザー インタフェースの表示などデスクトップに描画したりデスクトップの情報を参照することができません。
この制限は、Windows サービス アプリケーションから直接的にユーザー インタフェースを表示する処理のみならず、Windows サービス アプリケーションが利用する API がその処理の結果としてユーザーインタフェースを表示する場合も該当します。
また、Windows サービス アプリケーションからデスクトップへ描画したり、デスクトップ情報を参照するような処理は、Windows サービス アプリケーション内部のデッドロック等さまざまな問題の原因となり得るため、Windows サービス アプリケーションからこのような処理を行う可能性がある API を利用することは推奨されていません。また、ユーザ プロファイルにアクセスすることがある可能性がある API もセッション 0 以外のユーザー セッションにおいて動作するアプリケーションからの利用を前提としているため、同様な理由により利用は推奨されていません。
詳細
デスクトップへの描画したり、デスクトップ情報を参照するような処理を行う API の例として、USER32.DLL, GDI32.DLL, WINSPOOL.DRV などで提供しているグラフィックスや印刷に関連した API が相当します。最も顕著な例は、GDI32.DLL や WINSPOOL.DRV から利用する印刷関連の API です。
GDI32.DLL や WINSPOOL.DRV などで提供されている印刷関連の API からは各種のダイアログ ウィンドウが表示される可能性があります。また、プリンタ ドライバは、一定の条件下でダイアログの表示が許容されているため、ユーザー インターフェースを操作できないWindows サービス アプリケーションからこれらの API を利用することで、プリンタ ドライバからダイアログ ウィンドウが表示される可能があります。
このように、グラフィックスや印刷に関連した API はアプリケーションから制御できない要因でデスクトップに描画したり、デスクトップ情報を参照する可能性があるため、Windows サービス アプリケーションからの利用は推奨されていません。
回避策
デスクトップに描画したり、デスクトップ情報を参照する可能性がある API は、ユーザー セッション上で動作するアプリケーションから利用することを推奨します。
また、Windows サービス アプリケーションからユーザー セッション上で動作するプロセスを生成する方法の例として CreateProcessAsUser() 関数などの API を呼び出す方法があります。
関連情報
セッション 0 で動作するWindows サービス アプリケーションやドライバに関する技術情報は以下のドキュメントを参照してください。

Impact of Session 0 Isolation on Services and Drivers in Windows
注意 : これは、マイクロソフトのサポート組織内で直接作成された "緊急公開" の資料です。 この資料には、確認中の問題に関する現状ベースの情報が記載されています。 情報提供のスピードを優先するため、資料には誤植が含まれる可能性があり、予告なしに随時改定される場合があります。 その他の考慮事項については、使用条件を参照してください。
プロパティ

文書番号:2890836 - 最終更新日: 09/29/2016 15:15:00 - リビジョン: 2.0

Windows Vista Business, Windows Vista Home Basic, Windows Vista Home Premium, Windows Vista Ultimate, Windows Vista Enterprise, Windows Vista Service Pack 1, Windows Vista Service Pack 2, Windows Server 2008 Standard, Windows Server 2008 Enterprise, Windows Server 2008 Datacenter, Windows Server 2008 Foundation, Windows Server 2008 Service Pack 2, Windows 7 Home Basic, Windows 7 Home Premium, Windows 7 Professional, Windows 7 Ultimate, Windows 7 Enterprise, Windows 7 Service Pack 1, Windows Server 2008 R2 Standard, Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 R2 Foundation, Windows Server 2008 R2 Service Pack 1, Windows 8, Windows 8 Pro, Windows 8 Enterprise, Windows Server 2012 Standard, Windows Server 2012 Datacenter, Windows Server 2012 Essentials, Windows Server 2012 Foundation

  • KB2890836
フィードバック