從 ASP 呼叫時無法列印 COM 物件

本文可協助您解決當從使用中伺服器頁面呼叫 COM 物件傳送輸出至印表機時,失敗的問題。

原始產品版本:  Active Server 頁面
原始 KB 編號:  184291

徵狀

將輸出傳送至印表機的 COM 物件會在從主動伺服器頁面(ASP)呼叫時失敗,但從互動應用程式呼叫時會正確運作。 這個 COM 物件可以是商務產品(例如 Microsoft Office 應用程式),也可以是自訂的協力廠商物件。 常見的錯誤訊息是「ClassName 錯誤 ' 800a01e2 ' 印表機錯誤」。

原因

大部分物件用來列印的標準 APIs,都視位於 HKEY_CURRENT_USER 中的登錄專案而定。 此登錄蜂巢是動態的。 根據程式執行所在的使用者內容而定,將會在此蜂巢中載入不同的資訊。 ASP 頁面是在以系統帳戶執行的 IIS 下執行。 當您在 ASP 程式碼中建立 COM 物件的實例時,它預設會以系統帳戶的身分執行。 根據預設,系統帳戶不會在登錄中設定任何印表機。

解決方案

您可以設定系統帳戶的印表機,以解決此問題。 若要設定系統帳戶的印表機,請執行下列步驟:

警告

此方法需要您使用登錄編輯程式修改登錄。 正確使用登錄編輯程式可能會導致嚴重的整個系統問題,可能需要重新安裝 Windows 才能更正這些問題。 Microsoft 無法保證使用登錄編輯程式所造成的任何問題都會得以解決。 使用此工具需您自擔風險。

  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 。 Reg in Run ] 對話方塊。

  13. 將文字取代 HKEY_CURRENT_USER HKEY_USERS\.DEFAULT

  14. 儲存檔案。 然後,按兩下 [Windows Explorer] 中的檔案,將其匯入到登錄。

  15. 對 PrinterPorts 和 Windows .reg 重複步驟13到15。

注意

這些步驟僅適用于本機印表機。

若要讓 IIS 使用系統帳戶來列舉網路印表機,請遵循下列步驟。

注意

如果程式在網路服務帳戶下執行,則需要對新建立登錄的明確許可權。

  1. 確定您目前是以安裝了所需網路印表機的使用者身分登入伺服器。

  2. 啟動 [登錄編輯程式]。

  3. 選取下列機碼:

    HKEY_CURRENT_USER\Printers\Connections

  4. 在 [登錄] 功能表上,選取 [匯出登錄]。

  5. 在 [檔案名] 方塊中,輸入c:\printconns.reg

  6. 若要在記事本中開啟printconns檔案,請選取 [開始],選取 [執行],在 [開啟] 方塊中輸入 [Notepad printconns],然後選取 [確定]

  7. HKEY_CURRENT_USER以文字取代文字 HKEY_USERS\.DEFAULT

  8. 儲存檔案。

  9. 若要將檔案匯入到登錄中,請在 Windows Explorer 中按兩下檔案。

  10. 重新開機列印多工緩衝處理器服務。