• 締切済み

C#でIISでPDFを印刷する方法

VisualStudioでC#/ASP.netでPDFファイルをサイレント印刷するプログラムを実装しています。 「VisualStudio開発サーバーを使用する」の状態だと、 問題なく動作するのですが 「IIS Webサーバーの仕様」にすると 下記コードが全く反応しなくなります。 プリンタのプロパティ(セキュリティ)には 「Network Service」の「実行権限」を追加しています。 コードは、以下です。原因に何か心当たりのある方は、ご教授下さい。 Process printProcess = new Process(); string filePath = null; try { filePath = "C:\\PDFPRINT\\Output\\out.pdf"; printProcess.StartInfo.FileName = "C:\\Program Files (x86)\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe"; printProcess.StartInfo.Verb = "open"; printProcess.StartInfo.Arguments = " /h /t " + filePath + " EPSON PX-404A"; printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; printProcess.Start(); printProcess.WaitForExit(1500); } catch { throw; } finally { if (!printProcess.HasExited) { printProcess.Kill(); printProcess.Dispose(); } }

みんなの回答

noname#212058
noname#212058
回答No.2

No.1 です。 おそらく、以下のことかと思われます。 (日本語訳があんまりなので、下の原文のほうが わかり易いかもしれません) http://support.microsoft.com/kb/555134/ja http://support.microsoft.com/default.aspx?scid=kb;en-us;555134

noname#258812
質問者

お礼

Web印刷の納期がすぎたので、行えず終了しました。今回は実現できませんでしたが情報のご教示ありがとうございました。

noname#258812
質問者

補足

回答ありがとうございます。 Webサーバー側で印刷というのは、 それほど特殊なモノなのでしょうか・・・。 サイトを拝見しました。 「デスクトップとの対話サービスを許可」 にチェックを入れましたが現象変わりません(印刷できません。) ちなみにマシンはWindows7 HomePremium/IIS7です。 大変恐縮ですが、引き続きお知恵を拝借できると幸いです。

noname#212058
noname#212058
回答No.1

IIS(Webサーバ)では、このコードは IIS のワーカプロセス上で 動くわけですが、このワーカプロセスを動かしているユーザ に Process の実行権限がないためです。 このような場合には、『ワーカプロセスの権限を変更』するか、 『ユーザの偽装』という実装を使用するかのいずれかの対処が 必要です。 [ユーザの偽装] http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32959&forum=7 ※ 『ワーカプロセスの権限変更』は、セキュリティホールを自分で   作りこむ行為ですので、特に外部向けのシステムの場合はお   勧めできません。(サーバを乗っ取られても知りませんよ)

noname#258812
質問者

補足

回答ありがとうございます。 <identity impersonate="true" userName="username" password="password" /> をweb.configに追加し、 コードのデバック中にも System.Environment.UserNameにて、このユーザ名が取得できます。 プリンタのプロパティのセキュリティにも、このユーザが追加されており、アクセス許可で『印刷』にチェックが入っています。 相変わらず、VisualStudio開発サーバーで起動すると印刷できるのですが。 IISのWebサーバーを使用するで起動すると印刷できません。 ほかに何が考えられるでしょうか。 プリンタはデバイスプリンタなのでUSB接続で 開発しているPCにつないでおり、 プリンタトライバ名は 「printProcess.StartInfo.Arguments = " /h /t " + filePath +" \\\\192.168.1.6\\EPSON PX-404A"」 のように \\[開発しているPCのIPアドレス]\[プリンタ名]で指定しています。

関連するQ&A