QA@IT

[ASP.Net] CrystalReportを使用してネットワークプリンタで印刷

3998 PV

VisualStudio2008
WindowsServer2008R2
ASP.Net(VB.NET)
CrystalReport
IIS7.5

仮想マシンの環境にWebフォームを配置して、Crystal Reportを使用してネットワークプリンタに直接印刷したいのですが、
スプールはプリンタに送信されていますがプリンタで確認するとジョブが溜まっていません。
(プリンタのテスト印刷は印刷できます)

・プリンタに「Network Service」「IIS_IUSRS」「IUER」のユーザを追加しても駄目でした。
・Web.configにを追加すると以下のエラーがでるようになったので削除しました
"レポートファイルのアクセスが拒否されました。別のプログラムで使用されている可能性があります。"

実装では以下のようにしております。
●ASP.Net 印刷ボタン押下

    Dim RclsObj As New ReportDocument()
    RclsObj.Load(Server.MapPath("../Report/RFR01.rpt"))
    RclsObj.PrintOptions.PrinterName = プリンタ名
    RclsObj.SetDataSource(dsPrintData)
    RclsObj.PrintToPrinter(1, False, 0, 0)

●Web.cofig

  <system.web>
        <authentication mode="Windows"/>
        <identity impersonate="false"/>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>

IISの権限の問題なのか、プリンタの問題なのか
Asp.Netの基礎知識がなくて申し訳ないのですが、
ご指導いただけますでしょうか。

回答

SurferOnWwwさん、ご回答ありがとうございます。

プリンターはネットワークプリンタをローカルプリンタのように追加しております。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3583&forum=7

上記を参考に幾つか試してみましたがプリンタにスプールをはいていますがプリンタにジョブが溜まらない状況は変わりませんでした。
・IIS(7.5)のアプリケーションプール(DefaultAppPool)の詳細設定にあるプロセスモデル>IDを"LocalSystem"に変更
 →スプールでは、スプールの所有者がIUSRとなり状態が印刷となりましたが、プリンタにジョブが残らないのは変わりませんでした。
・プリンタのセキュリティに"everyone"がいますが、"LocalService","SYSTEM"のユーザを追加しても印刷されません。

他の確認点は、
以下URLを参考に、system ユーザー( Default User) に対して、プリンタ情報を設定しましたが状況は変わらずです。
https://support.microsoft.com/ja-jp/kb/419321

具体的に、「システム設定に対するアクセス権」の方法はIISの設定かweb.configの設定かが足りないのでしょうか。

編集 履歴 (2)
  • 紹介した記事「Server-side printing」に書いてあることを全てやったがダメだったと言われると、すみませんが自分としてはこれ以上お役に立てることはなさそうです。
    あ、一つだけ、note that there is a dot before DEFAULT と書いてあるところはきちんとやりましたか?
    -

質問が理解できませんが、サーバー側で印刷するということですか?

であれば、以下の記事が参考になると思います。

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

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

前者はかなり古くて IIS5.x のもののようで、IIS6.x 以降は、後者の記事に書いてありますが、IIS Manager を使ってワーカープロセスのアカウントを設定するとのことです。IIS7.x は以下の通り。

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

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

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

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。