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

摘要

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

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

注意

在此脈絡下,Access 資料庫引擎 Redistributable 與 Access Runtime 被視為 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 使用 Windows 安裝程式 (MSI) 技術,讓終端使用者安裝與自我修復Microsoft更簡便。 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 元件無法建立物件

    訊息 2

    注意

    執行時錯誤 '70':權限被拒

    訊息3

    注意

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

    訊息4

    注意

    E_ACCESSDENIED (0x80070005) :存取被拒

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

    注意

    執行時錯誤「5981」 (0x800A175D) :無法開啟巨集儲存裝置

    訊息 2

    注意

    執行時錯誤 '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 部分)

操作 2007 Word Files 開放 XML 物件模型 (第二部分(共三部分)

操作 2007 Word Files 開放 XML 物件模型 (第三部分)

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

操作 Excel 2007 與 PowerPoint 2007 與 Open XML 物件模型Files (第二部分)

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

利用開放 XML 物件模型建構 Server-Side 文件產生解決方案 (第二部分(共兩部分))

從 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

如何使用 ASP 中的 ADO 查詢並更新 Excel 資料

286023 如何使用 VB ActiveX 元件進行 Internet Explorer 的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 網路服務開發自訂應用程式

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

Word Automation Services 概觀

介紹 Word 自動化服務 你需要評估本文所描述的選項中哪些最適合你的需求,以及如何最佳地部署你的解決方案。 此文章所提供的資訊並不保證能夠解決所有用戶端的所有問題。 建議您在部署解決方案之前先針對解決方案進行完整的測試。