none
ASP.Netアプリからネットワークプリンタへの印刷でエラーが発生する RRS feed

  • 質問

  • ASP.Netアプリからネットワークプリンタへの印刷で、「プリンタがインストールされていません」とのエラーが発生して印刷できない

    【環境】
    Windows Server 2012 R2
    .Net Framework 4.5.2
    ASP.Net
    ネットワークプリンタの設定済み(サーバー上でNotepadから印刷が出来る事を確認)

    現在、ASP.Netを使用してシステムを構築しているのですが、ネットワークプリンタへの印刷でエラーが発生して困っております。
    社内の環境(WindowsServer2008R2)では印刷できていたので、OSかIISの設定かと考えているのですが、印刷に関する
    設定が見当たりません。

    ・サーバー上で別からの印刷は可能(プリンタのセットアップには問題がない)
    ・WindowsServer2008R2上では印刷可能(アプリからの印刷は問題がない)

    上記を踏まえると、OS、IISのバージョン違いによるセキュリティ設定かと考えているのですが、ASP.Netから印刷を行う
    際のOSの設定、IISの設定があれば、ご教示いただけないでしょうか。

    以上、よろしくお願いいたします。


    2016年5月18日 1:44

すべての返信

  • サーバー側で印刷するということですか? であれば、以下の記事が参考になりませんか?

    サーバーからの Web ベースのレポートの印刷
    https://msdn.microsoft.com/ja-jp/library/aa290045%28v=vs.71%29.aspx

    ワーカープロセスを SYSTEM アカウントで動かさなければならないところにセキュリティ上の問題がありそうですが、自分の知る限りではそれ以外の手段がなさそうです。

    2016年5月18日 3:43
  • 【追伸】

    上に紹介した記事はかなり古いようで(.NET Framework 1.1 のものらしい)、.NET 4 では machine.config の <processModel> 要素のデフォルト設定は以下のようになっています。

    <processModel autoConfig="true" />

    userName と password 属性の設定(デフォルトでそれぞれ machine, AutoGenerate)は変わらないようです。詳しくは以下の記事を見てください。

    processModel 要素 (ASP.NET 設定スキーマ)
    https://msdn.microsoft.com/ja-jp/library/7w2sway1%28v=vs.100%29.aspx

    2016年5月18日 4:09
  • 試せる環境にないので確認はできないのですが、これは大昔のIISとASP.NETの場合の話に見えます。

    今なら、単にアプリケーションプールのアカウントをカスタムにして、ユーザープロファイルのロードを行う設定(デフォルトがどうだったかは失念)にすればできるような気がします。

    ※上記カスタムのアカウントでプリンタを設定します。

    あとprocessModelの多くの設定は現在ではIISの設定(以前はメタベース、今はApplicationHost.configかな)に移動していて、ApplicationHost.configでは同様にprocesModelという設定だったとは思いますが、IISのアプリケーションプールの設定で行います。

    ※machine.configで行っても無視された気がしますが、無視されるのはIIS6だけだったかも、ちょっとこの辺はあいまいです。
     ただ、無視はされなかったとしても、基本的にIISのアプリケーションプールレベルの設定で行うべきです。

    2016年5月18日 6:34
  • 皆様

    ご回答ありがとうございます。

    ユーザー偽装する事により、プリンタは見えるようになり

    印刷ジョブがプリンタキューに入るようになったのですが、

    今度はプリンタキューにて「アクセスが拒否されました」

     というエラーが発生してしまいました。

    ネットワークプリンタの設定を見直してみようと思います。

    ApplicationHost.configについては明日確認してご回答さ

    せていただきます。

    以上、よろしくお願いいたします。

    2016年5月18日 15:13
  • > ユーザー偽装する事により、プリンタは見えるようになり
    > 印刷ジョブがプリンタキューに入るようになったのですが、
    > 今度はプリンタキューにて「アクセスが拒否されました」
    > というエラーが発生してしまいました。

    紹介した記事に、サーバー側で印刷するために必要な条件の一つとして "サーバー上のシステム設定に対するアクセス権を ASPNET の作業プロセスに与える" というのがありますが、そのために "Framework をローカル SYSTEM アカウントのもとで実行する必要があります" という話だと思うのですが。

    何故「システム設定に対するアクセス権」が印刷する際に必要なのかは分かりませんが、普通のユーザーアカウントで良ければ SYSTEM アカウントを使えとは書いてないでしょうし、少なくとも IIS6.x でそれが緩和されたということはなさそうです。

    Server-side printing
    http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.dwnet_2.0.dwprgnet/html/dwprgnet/BEICAAJF.htm


    > ネットワークプリンタの設定を見直してみようと思います。

    それでダメなら、紹介した記事のとおり、ローカル SYSTEM アカウントを使って試してみてはいかがですか?

    ただし、紹介した記事は IIS5.x のもののようで、IIS6.x 以降は、上の紹介した記事にも書いてありますが、IIS Manager を使ってワーカープロセスのアカウントを設定するとのことです。IIS7.x は以下の通り。

    Process Model Settings for an Application Pool <processModel>
    http://www.iis.net/configreference/system.applicationhost/applicationpools/add/processmodel

    • 回答の候補に設定 星 睦美 2016年11月30日 8:21
    2016年5月19日 7:44