Office 伺服器端自動化的考量因素

摘要

開發人員可以使用 Microsoft Office 中的「自動化」,利用 Office 產品的內建功能與特性建立自訂解決方案。 儘管此類程式開發在用戶端系統上實行起來並不難,但是如果要從伺服器端程式碼 (例如 Microsoft Active Server Page (ASP)、ASP.NET、DCOM 或 Windows NT 服務) 來執行自動化,情況就會複雜得多。

本文將探討開發人員可能要面對的複雜狀況。 本文也會提供可加速效能的自動化替代方案。 然而,開發人員應該要瞭解,本文提供的的建議僅供參考。 Microsoft 並不建議或支援 Office 的伺服器端自動化。

注意在本文中,Microsoft 2007 Office System Driver 和 2010 Access Database Engine 皆視為 Microsoft Office 元件。 「伺服器端」一詞亦指在 Windows 工作站上執行的程式碼 (假如它是從登入使用者的互動式工作站以外的 Windows 工作站來執行)。 例如,在 SYSTEM 帳戶下由工作排程器所啟動的程式碼是在和「伺服器端」ASP 或 DCOM 程式碼相同的環境中執行。 因此可能會發生許多本文中描述的問題。 如需關於 Windows 工作站和 COM 的詳細資訊,請參閱<其他相關資訊>和<參考>等章節。

其他相關資訊

所有目前的 Microsoft Office 版本均經過設計、測試及設定做為用戶端工作站上的使用者產品。 它們是採用互動式桌面及使用者設定檔。 而且不提供設計為自動執行的伺服器端元件所需要的重新進入或安全性等級。

目前 Microsoft 並不建議 (亦不支援) 從任何自動、非互動式用戶端應用程式或元件 (包括 ASP、ASP.NET、DCOM 及 NT 服務等) 進行 Microsoft Office 應用程式自動化,因為 Office 在這種環境下執行時,可能會出現不穩定及/或鎖死的情形。

當您建置於伺服器端內容執行的解決方案時,應嘗試使用可安全自動執行的元件。 或者您應嘗試找到至少可讓部分程式碼得以使用戶端正常運作的替代方案。 若透過伺服器端解決方案使用 Office 應用程式,該應用程式將會缺少許多必要功能,導致無法順利執行。 另外,整體解決方案也將承受出現不穩定情形的風險。

使用伺服器端 Office 自動化功能的問題

開發人員如果想在伺服器端解決方案中使用 Office,必須考量到以下五個重要領域,因為 Office 會由於環境的緣故,表現不如預期。 如果希望程式碼能順利執行,您必須解決這些問題,並盡可能將其影響降到最低。 建置應用程式時,請仔細考慮這些問題。 您無法透過單一解決方案解決所有問題。 針對不同的設計,您需要以不同的方式排定元素的優先順序。

  • 使用者身分識別: 即使 Office 應用程式是由自動化所啟動,在執行時仍會採用使用者身分識別。 這些應用程式會根據啟動應用程式之使用者的使用者登錄 Hive 中的設定,嘗試初始化工具列、功能表、選項、印表機和某些增益集。 許多服務會在沒有使用者設定檔的帳戶下執行 (例如 SYSTEM 帳戶或 IWAM_[servername] 帳戶)。 因此,Office 將無法在啟動時正確初始化。 在此情況下,Office 會傳回 CreateObject 函式或 CoCreateInstance 函式的錯誤狀態。 即使 Office 得以啟動,如果缺乏使用者設定檔,其他函式也可能無法正確地執行。

  • 與桌面互動: Office 應用程式會假定自身是在互動式桌面執行。 在某些情況下,可能需要將應用程式設定為顯示,部分自動化函式才能正確執行。 如果發生意外錯誤,或者需要某個未指定的參數來完成某項函式,Office 的設計是會以強制回應對話方塊詢問使用者要做什麼動作。而且非互動式桌面上的強制回應對話方塊無法加以關閉。 因此會導致執行緒無限期地停止回應 (當機)。 雖然特定的程式碼編寫準則有助於降低發生此問題的機會,但仍無法完全避免。 單單這個問題,就可能使得從伺服器端環境執行 Office 應用程式時危機重重,支援不足。

  • 重新進入與延展性: 伺服器端元件必須是隨時可重新進入的多重執行緒 COM 元件,並具有最低負荷以及因應多重用戶端的高輸送量。 Office 應用程式幾乎在所有方面都與這些需求相去甚遠。 Office 應用程式是不可重新進入的 STA 自動化伺服器,設計為單一用戶端提供多樣化但需要甚多資源的功能。 做為伺服器端解決方案,這些應用程式所提供的延展性極為有限。 另外,這些應用程式的重要元素 (例如記憶體) 有其固定限制。 您無法透過設定變更這些元素。 更重要的是,這些應用程式會使用記憶體對應檔案、全域增益集或範本,以及共用自動化伺服器等全域資源。 這可能會限制可同時執行的執行個體數量;如果應用程式設定為多用戶端環境,還可能導致競爭狀況。 開發人員如果計劃同時執行一個以上的 Office 應用程式執行個體,必須考慮使用「共用」或序列化的方式存取 Office 應用程式,以避免發生鎖死或資料損毀的情形。

  • 恢復功能與穩定性: Office 2000、Office XP、Office 2003 與 Office 2007 採用了 Microsoft Windows Installer (MSI) 技術,讓使用者要安裝及自行修護時都更容易。 MSI 引進了「第一次使用時才安裝」的概念。 MSI 允許在執行時間為系統 (或者更多情況下是為特定使用者) 以動態方式安裝或設定功能。 但在伺服器端環境中,這樣做不但會降低效能,還可能出現對話方塊要求使用者認可安裝或提供適當的安裝磁碟。 雖然 MSI 是設計來強化 Office 做為使用者產品時的恢復功能,但在 Office 上實行其功能,卻會在伺服器端環境中產生反效果。 此外,於伺服器端執行 Office 時,也無法保證其整體穩定性,因為 Office 並非針對此種用途來設計或測試。 在網路伺服器上使用 Office 做為服務元件,可能會降低該電腦的穩定性,進而影響整個網路的穩定性。

  • 伺服器端安全性: Office 應用程式完全不是為伺服器端用途所設計。 因此,我們在設計 Office 應用程式時並未考慮到會影響元件面的安全性問題。 Office 不會驗證傳入的要求。 Office 也不會防止您不慎執行巨集,或是防止從您的伺服器端程式碼去啟動其他可能執行巨集的伺服器。 請千萬不要開啟從匿名網站上傳至伺服器的檔案! 根據前次的安全性設定,伺服器可能會利用「系統管理員」或「系統」的身分,以完整的權限執行巨集,藉此危害您網路的安全性! 此外,Office 也會使用許多可快取用戶端驗證資訊的用戶端元件 (例如 Simple MAPI、WinInet 和 MSDAIPP),以加速處理。 如果在伺服器端執行 Office 自動化,單一執行個體可能會為多個用戶端服務。 如果驗證資訊在工作階段中已經快取,單一用戶端便能使用其他用戶端的快取認證資訊。 如此一來,用戶端便能模擬其他使用者,藉此獲得未獲授與的存取權限。

除了技術問題之外,您也必須考慮到授權問題。 目前的授權準則無法在伺服器上使用 Office 應用程式來服務用戶端要求,除非這些用戶端本身具有已授權的 Office 複本。 「使用者授權合約」(EULA) 的條款中並不包含使用伺服器端自動化,替未授權的工作站提供 Office 功能。

除了這些問題之外,當您嘗試於伺服器端自動化 Office 時,也可能會發生以下其中一種常見錯誤:

  • CreateObject 函式和 CoCreateInstance 函式會傳回下列執行階段錯誤訊息,且無法啟動自動化。

    訊息 1

    執行階段錯誤 '429': ActiveX component cannot create object (執行階段錯誤 '429':ActiveX 元件無法建立物件)

    訊息 2

    Run-time error '70': Permission denied (執行階段錯誤 '70':使用權限被拒)

    訊息 3

    CO_E_SERVER_EXEC_FAILURE (0x80080005): Server execution failed (CO_E_SERVER_EXEC_FAILURE (0x80080005):伺服器執行失敗)

    訊息 4

    E_ACCESSDENIED (0x80070005): Access denied (E_ACCESSDENIED (0x80070005):拒絕存取)

  • 當您開啟 Office 文件時,便會收到下列其中一項錯誤訊息。

    訊息 1

    Run-time error '5981' (0x800A175D): Could not open macro storage (執行階段錯誤 '5981' (0x800A175D):無法開啟巨集的儲存處)

    訊息 2

    Run-time 錯誤 '1004': Method '~' of object '~' failed (執行階段錯誤 '1004':物件 '~' 的方法 '~' 失敗)

  • CreateObject 函式和 CoCreateInstance 函式停止回應且無法完成,或花費很長的時間才回應。 在部分伺服器能夠快速建立,但 Windows 事件記錄檔顯示代表應用程式已停止的 1004 錯誤。

  • 使用者提醒或其他需要使用者處理的對話方塊可能導致部分函式意外失敗或無限期停止回應。

  • 執行多重要求或壓力測試會讓程式碼在建立或終止某個 Office 應用程式時失敗、停止回應或損毀。 發生這種情況時,處理程序可能會在記憶體中繼續執行且無法終止,或者已執行自動化之應用程式的所有執行個體從此點之後均會失敗。

除了此處所列的問題之外,還可能出現其他問題或訊息,但通常這些問題的成因不外乎本文先前所述的五項主要問題。 

伺服器端自動化的替代方案

Microsoft 強烈建議開發人員,如果需要開發伺服器端解決方案,請儘量不使用 Office 自動化,改採其他替代方案。 由於 Office 設計上的限制,對 Office 組態所做的變更並不能解決所有問題。 Microsoft 提供許多不需在伺服器端安裝 Office 的有效替代方案,可執行大部分常見的工作,且比自動化更迅速、更有效率。 在專案中納入 Office 做為伺服器端元件前,請先考慮使用這些替代方案。

大部分的伺服器端自動化工作都包含文件建立或編輯。 Office 2007 支援新的 Open XML 檔案格式,讓開發人員能建立、編輯、讀取和轉換伺服器端的檔案內容。 這些檔案格式使用 Microsoft .NET 3.x Framework 中的 System.IO.Package.IO 命名空間,可在不使用 Office 用戶端應用程式的情況下編輯 Office 檔案。 處理服務中的 Office 檔案變更時,建議您使用此受支援的方法。

Open XML 檔案格式是公用標準的檔案格式。 


Microsoft 透過 .NET 3.x Framework 提供可處理 Open XML 檔案格式的 SDK。 如需有關此 SDK 及如何用此 SDK 建立或編輯 Open XML 檔案的詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:

Open XML SDK 文件

如何: 處理 Office Open XML 格式文件

利用 Open XML 物件模型處理 Word 2007 檔案 (第 1 部分,共 3 部分)

利用 Open XML 物件模型處理 Word 2007 檔案 (第 2 部分,共 3 部分)

利用 Open XML 物件模型處理 Word 2007 檔案 (第 3 部分,共 3 部分)

利用 Open XML 物件模型處理 Excel 2007 和 PowerPoint 2007 檔案 (第 1 部分,共 2 部分)

利用 Open XML 物件模型處理 Excel 2007 和 PowerPoint 2007 檔案 (第 2 部分,共 2 部分)

利用 Open XML 物件模型建置伺服器端文件產生解決方案 (第 1 部分,共 2 部分)

利用 Open XML 物件模型建置伺服器端文件產生解決方案 (第 2 部分,共 2 部分)

從 ASP 或 ASP.NET 串流 Open XML 檔案時,您必須為串流內容提供正確的多用途網際網路郵件擴充 (MIME) 類型。 如需 Office 2007 檔案的 MIME 類型清單,請造訪下列網站:

Office 2007 檔案格式 MIME 類型,用於 HTTP 內容串流

如果您只將 Office 2007 前用戶端設為目標,並不要求在解決方案中使用 Open XML,您可以使用其他非二進位 Office 檔案格式,例如 HTML、XML 和 RTF。 然後,您可以使用 MIME 類型將這些檔案串流至用戶端,如此可以使文字在 Office 中顯示。 只要使用伺服器上的 ASP,此文件便可進行編輯、儲存、甚至傳回伺服器。

如需這些主題及執行範例的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

198703如何從用戶端 VBScript 自動化 Excel

278973ExcelADO 示範使用 ADO 在 Excel 活頁簿讀取和寫入資料的方法

286023如何從 Internet Explorer 使用 VB ActiveX 元件將 Word 自動化
 

如果您的企業需要伺服器端建立 Office 97、Office 2000、Office XP 和 Office 2003 二進位檔案格式,協力廠商會提供可協助您的元件。 Microsoft 並未提供這類元件,因此您需要自行建立解決方案或向協力廠商購買。 市面有許多不同的協力廠商產品可供選擇。 您應該調查每個解決方案,然後找出最能符合貴公司需要的廠商。

如果您想建立自己的解決方案以直接編輯 Office 97、Office 2000、Office XP 和 Office 2003 二進位檔案格式,根據 Microsoft Open Specification Promise (OSP) 的條款,您可以免費取得檔案格式規格。 我們並未針對說明文件或您自行建立的產品提供技術支援,但可提供說明文件。 


伺服器端解決方案可能也可允許使用者上傳檔案,然後讓伺服器轉譯檔案以便在網站或其他媒體上檢視。 Microsoft 目前正在努力提供此功能,並在 Microsoft Excel Services 中提供此功能的初階版本。

Excel Services 是包含在 Microsoft Office SharePoint Server 2007 中的新伺服器技術,讓您能在 Office SharePoint Server 2007 上載入、計算及顯示 Excel 活頁簿。 如需有關 Excel Services 的詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:

Excel Services 概觀

逐步解說: 使用 Excel Web Services 開發自訂應用程式

使用 Excel Services 和 Office Open XML 格式建立企業版應用程式 Word Automation Services 是 SharePoint Server 2010 中的新服務應用程式。 Word Automation Services 提供的功能可讓伺服器端自動將文件轉換成 Microsoft Word 客戶端應用程式可支援的格式。

Word Automation Services 概觀

介紹 Word Automation Services 您必須評估文章中所敘述的何種方式符合您的需求,以及對部署您的解決方案有何幫助。 此文章所提供的資訊並不保證能夠解決所有用戶端的所有問題。 建議您在部署解決方案之前先針對解決方案進行完整的測試。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

Thank you for your feedback!

Thank you for your feedback! It sounds like it might be helpful to connect you to one of our Office support agents.

×