作成日: 2022/04/20 最終更新日: 2024/10/18
文書種別
技術情報
詳細
WebアプリケーションでPrintメソッドを使用してサーバーサイドのプリンタに直接印刷する場合、以下の点にご留意ください。
実行ユーザーがプリンタに対するアクセス権限を所持している必要がある
IISに配置したWebアプリケーションの場合、アプリケーションプールのIDに設定されているアカウントがアプリケーションの実行ユーザーになります。
一例として、アプリケーションプールIDにApplicationPoolIdentityが設定されている場合、アプリケーションプール専用の仮想アカウントが実行ユーザーになります。
IIS の ID について - Internet Information Services
ApplicationPoolIdentity: 新しいアプリケーション プールが作成されると、IIS は新しいアプリケーション プールの名前を持つ仮想アカウントを作成し、このアカウントの下でアプリケーション プールワーカー プロセスを実行します。 これは、最小特権のアカウントでもあります。
意図的に設定を変更しない限りは、「アプリケーションの実行ユーザー」と「サーバーにログオンしているユーザー」は異なることにご注意ください。後者のユーザーがGUI操作でインストールしたプリンタドライバに対して、前者のユーザーはアクセス権限を所持していない可能性があります。
アプリケーションプールやアクセス権限の設定方法については、マイクロソフト社が公開している技術情報をご参照ください。
IIS 7.0 での組み込みユーザーとグループ アカウントとは
なお、アプリケーションプールIDにはカスタムアカウントとして一般ユーザーを設定することもできます。
管理者権限を所持するユーザーをアプリケーションIDに設定すれば、確実にプリンタにアクセスすることが可能です。ただし、Webアプリケーションの実行ユーザーに管理者権限を与えることはセキュリティ上のリスクがありますので、動作検証を目的とした一時的な対処方法としてご利用ください。
ダイアログを表示する操作は実行できない
Webアプリケーションの実行ユーザーは基本的にGUIを持たないため、ダイアログを表示する操作は実行できません。Visual Studioのデバッグでは実行できますが、これは例外的な動作です。
Printメソッドの引数にFalseを設定してダイアログを非表示にしてください。
◆サンプルコード (C#)
var rpt = new SectionReport1();
rpt.Document.Printer.PrinterName = "プリンタ名";
rpt.Run();
rpt.Document.Print(false, false, false);
◆サンプルコード (VB.NET)
Dim rpt As New SectionReport1
rpt.Document.Printer.PrinterName = "プリンタ名"
rpt.Run()
rpt.Document.Print(False, False, False)
また、「Microsoft Print to PDF」などの仮想ドライバはファイル保存のダイアログを表示するため、この方法では使用できません。物理プリンタを指定してください。