ASP から呼び出したときに、COM オブジェクトが印刷に失敗する


現象


出力をプリンタに送信する COM オブジェクトを、ASP (Active Server Pages) から呼び出すと失敗します。しかし、その COM オブジェクトを対話型アプリケーションから呼び出すと、正しく機能します。 この COM オブジェクトは、Microsoft Office アプリケーションなどの商用の製品の場合も、独自のサードパーティ オブジェクトの場合もあります。 共通するエラー メッセージは "ClassName error '800a01e2' Printer error" です。

原因


大部分のオブジェクトが印刷に使用する標準の API は、HKEY_CURRENT_USER に配置されているレジストリ エントリに依存します。 このレジストリ ハイブは動的に設定されます。 プロセスを実行するユーザー コンテキストによって、異なる情報がこのハイブに読み込まれます。 ASP ページは、SYSTEM アカウントで実行される IIS の管理下で実行されます。 ASP コードで COM オブジェクトのインスタンスを作成する場合、特に指定しない限り、そのインスタンスも SYSTEM アカウントで実行されます。 デフォルトでは、レジストリ内に、SYSTEM アカウントに対してセットアップされたプリンタが存在しません。

解決方法


SYSTEM アカウントに対してプリンタをセットアップすることで、この問題を解決できます。 SYSTEM アカウントにプリンタを設定するには、以下の手順を実行します。

この方法では、レジストリ エディタを使用して、レジストリを変更する必要があります。


警告: レジストリ エディタの使い方を誤ると、システム全体に深刻な問題が発生することがあり、Windowsを 再インストールして修正する必要があります。 マイクロソフトは、レジストリ エディタの誤用により発生した問題に関しては、一切責任を負わないものとします。 このツールはユーザー自身の責任において使用してください。
  1. サーバーに現在ログオンしているユーザーに対して、目的のプリンタがインストールされていることを確認します。
  2. レジストリ エディタ (Regedit.exe) を起動します。
  3. 次のキーを選択します。

    HKEY_CURRENT_USER
    \Software\Microsoft\Windows NT\Current Version\Devices

  4. [レジストリ] メニューの [レジストリ ファイルの書き出し] をクリックします。
  5. [ファイル名] テキスト ボックスに、「C:\Devices.reg」と入力します。
  6. 次のキーを選択します。

    HKEY_CURRENT_USER
    \Software\Microsoft\Windows NT\Current Version\PrinterPorts

  7. [レジストリ] メニューの [レジストリ ファイルの書き出し] をクリックします。
  8. [ファイル名] テキスト ボックスに、「C:\PrinterPorts.reg」と入力します。
  9. 次のキーを選択します。

    HKEY_CURRENT_USER
    \Software\Microsoft\Windows NT\Current Version\Windows

  10. [レジストリ] メニューの [レジストリ ファイルの書き出し] をクリックします。
  11. [ファイル名] テキスト ボックスに、「C:\Windows.reg」と入力します。
  12. [スタート] ボタンをクリックし、[実行] をクリックします。 [実行] ダイアログ ボックスで「Notepad Devices.reg」と入力し、メモ帳で Devices.reg を開きます。
  13. テキスト HKEY_CURRENT_USER を HKEY_USERS\.DEFAULT に置き換えます。
  14. ファイルを保存します。 次に、Windows エクスプローラでそのファイルをダブルクリックし、そのファイルをレジストリにインポートします。
  15. PrinterPorts.reg と Windows.reg に対して、手順 13 ~ 15 を繰り返します。
これらの手順は、ローカル プリンタでのみ機能します。

SYSTEM アカウントを使用して IIS がネットワーク プリンタを列挙できるようにするには、次の手順に従います。

注: プロセスがネットワーク サービス アカウントで実行されている場合は、新しく作成されたレジストリに対する明示的なアクセス許可が必要です。
  1. 目的のネットワーク プリンタがインストールされているユーザーとして、サーバーに現在ログインしていることを確認します。
  2. レジストリ エディターを起動します。
  3. 次のキーをクリックします。
    HKEY_CURRENT_USER\Printers\Connections
  4. [レジストリ] メニューの [レジストリ ファイルの書き出し] をクリックします。
  5. [ファイル名] ボックスに、「c:\printconns.reg」と入力します。
  6. printconns.reg を開くには、[スタート] ボタンをクリックし、[実行] をクリックします。次に、[名前] ボックスに「Notepad printconns.reg」と入力し、[OK] をクリックします。
  7. テキスト HKEY_CURRENT_USER を HKEY_USERS\.DEFAULT に置き換えます。
  8. ファイルを保存します。
  9. そのファイルをレジストリにインポートするには、Windows エクスプローラでそのファイルをダブルクリックします。
  10. Print Spooler サービスを再起動します。

関連情報


Visual InterDev および Active Server Pages に関する「サポート技術情報」(Microsoft Knowledge Base) の最新資料およびその他のサポート情報については、マイクロソフトの「サポート オンライン」サイトの次のページを参照してください。




(c) Microsoft Corporation 1998, All Rights Reserved.
John Lewis, Microsoft Corporation 寄稿。