2009-11-06 83 views
3

我開發了一個C#程序,它從SQL Server數據庫中提取數據,然後生成包含數據的Word文檔。我已將該程序設置爲在Windows Server 2003框中作爲SSIS作業的一部分運行。該程序以用戶SQLSVC運行,該用戶不具有管理權限。當我以SQLSVC身份登錄並運行該程序時,它會正確執行。然而,當程序被作爲SSIS作業自動運行它凍結在下面的代碼行辦公自動化的DCOM失敗

Microsoft.Office.Interop.Word.Application word = 
    new Microsoft.Office.Interop.Word.Application(); 

當我強制殺死過程中,產生以下的錯誤消息。

Error Message: System.Runtime.InteropServices.COMException (0x80080005): 
Retrieving the COM class factory for component 
with CLSID {000209FF-0000-0000-C000-000000000046} 
failed due to the following error: 80080005. 
    at IepGlance.Program.CreateNewIepFiles(Dictionary`2 
     iepDictionary, EasyIepDataContext dbContext) 
    at IepGlance.Program.Main(String[] args) 

據我可以找出問題是與DCOM權限。我用dcomcnfg將所有可能的DCOM權限添加到用戶SQLSVC,但這沒有幫助。還有其他可能的解決方案嗎?

回答

4

這裏有一些東西。

首先,這個thread on SO可能會有所幫助。

其次,Microsoft warns是「併發症」當你通過無人值守的自動化處理辦公室可能出現。這裏的點睛之筆(粗體原):

微軟目前並不 建議,並且不支持, 自動化的Microsoft Office從任何無人值守, 非交互式客戶端應用程序或 組件(包括 應用ASP,ASP.NET, DCOM和NT Service),因爲Office 當Office在這種環境 運行可能會出現不穩定的行爲和/或 僵局。

鏈接的文章討論解決方法。

+0

感謝周杰倫,這很有幫助 – 2009-11-06 19:14:29

3

這取決於你是否是一個64位的機器上,如果你是32位Office或64位的辦公室,但在任何情況下,你需要進入管理工具>組件服務,並在您需要的DCOM配置找到「Microsoft Word 97 - 2003 Document」,然後將「身份」設置爲正在運行應用程序池的用戶。或者乾脆停用安全性。

如果您正在使用32位Office 64位服務器,你可能很難找到這個DCOM設置。您需要從命令提示符運行「MMC -32」以啓動32位MMC,然後從「文件>添加/刪除管理單元」菜單中添加「組件服務」。

希望這對我有幫助

+0

看起來,即使是完全32位的環境也可能會混亂:帶有西里爾語言環境的Windows 8無法忍受這種薩滿教, VS2008和MSO 2003。奇怪的是,即使在32位系統上,'mmc'和'mmc -32'仍然提供對不同商店的訪問。 – 2012-09-18 16:52:56

6

運行程序「dcomcnfg -32」。 (如果在64位下運行,你不能找到word和excel組件) 轉到「控制檯根目錄/組件服務/計算機/我的電腦/ DCOM配置/」查找Microsoft Word和Excel並選擇屬性。 轉至安全性,並選擇下的「自定義」「配置權限。(如果需要的話,你可能要改變對方的權限爲好,但我並不需要)加入‘IIS_IUSRS’,並給它‘完全控制’。 現在去看「身份」,然後選擇「交互式用戶」

+0

這讓我到了正確的地方。我仍然無法看到它使用dcomcnfg -32,但** mmc comexp.msc/32 **做到了。 – davewasthere 2017-08-09 02:39:25