2

Server 2008 で Windows サービスとして実行されているアプリケーションがあります。アプリケーションとして実行して印刷ジョブを送信すると、印刷ジョブが正常に処理されます。ただし、代わりに Windows サービスに印刷ジョブを送信すると、「ハンドルが無効です」という例外がスローされます。

エラーは次のとおりです。

Printing Thread error: The handle is invalid. StackTrace:    at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument document, PrintEventArgs e)   at System.Drawing.Printing.PrintController.Print(PrintDocument document)   at System.Drawing.Printing.PrintDocument.Print()   at GrapeCity.ActiveReports.Viewer.Win.Printing.PrintImpl.DocumentPrinter.<Print>b__1e()

サービスは、管理者権限を持つ管理者アカウントで実行されています。

どんな助けでも大歓迎です!

4

3 に答える 3

1

ASP.NET アプリケーションでこの問題が発生しました。根本的な原因は、Web サイトが実行されている IIS アプリケーション プールで "32 ビット アプリケーションを有効にする" が設定されていたことです。

印刷機能が、インストールされている 64 ビット ドライバーではなく、32 ビット ドライバーに接続しようとしたようです。

.NET Windows アプリでは、「ターゲット CPU」設定も同様の問題を引き起こす可能性がありますか? つまり、x86 をターゲットにして x64 でアプリを実行しようとすると、32 ビット プリンター ドライバーにのみ接続されますか?

于 2014-11-25T07:12:15.190 に答える
1

確認すべきこと:

  1. サービスが実行されているユーザー アカウントに適切なプリンターがインストールされていること、およびそれが既定のプリンターとして設定されていることを確認してください。
  2. UI を明示的に表示しない ActiveReports の Print メソッドを使用していることを確認してください。
  3. [サービス] コントロール パネル アプレットのサービスのプロパティ ページで、[デスクトップとの対話をサービスに許可する] チェックボックスをオンにしてみてください。UI が表示されていなくても、プリンター ドライバーにはその機能が必要な場合があります。

最後に、Windows サービスからの一般的な印刷は不安定であることに注意してください。System.Drawing.Printing に関する Microsoft のドキュメントにも、次の免責事項があります。

System.Drawing.Printing 名前空間内のクラスは、Windows サービスまたは ASP.NET アプリケーションまたはサービス内での使用はサポートされていません。これらのアプリケーション タイプのいずれかからこれらのクラスを使用しようとすると、サービス パフォーマンスの低下やランタイム例外など、予期しない問題が発生する可能性があります。

これは、それが機能しないという意味ではありませんが、Microsoft がこの場合の印刷を支援したくないほどエラーが発生しやすいということです。これは、製造元のプリンター ドライバーが、必ずしも Windows サービスなどの非 UI プロセスからの印刷用に設計されているとは限らないためだと思われます。

于 2013-06-13T17:16:23.337 に答える
1

ルスル

許可またはプリンター アクセスの問題である可能性があります。ActiveReportsとの関連性を確認したいのですが、ActiveReportsと同じように別アプリを作成し、system.printing.drawingを実装してサービスとして実行していただけないでしょうか。

于 2013-06-12T23:13:57.883 に答える