2017-06-12 151 views
0

因此,我已經完成了很多挖掘該錯誤的工作,並且我想我已經嘗試過每一個我在本網站以及微軟論壇上看到的解決方案。我希望有人能告訴我我做錯了什麼,並幫助我。檢索具有CLSID的組件的COM類工廠{00020906-0000-0000-C000-000000000046}

Application wordApp = new Application(); 
Document wordDoc = new Document(); 

當我的應用程序獲取到代碼的第2行以上,它錯誤的出帶:

檢索COM類工廠CLSID組件{00020906-0000-0000-C000-000000000046}失敗,由於到以下錯誤:80070005訪問被拒絕。 (來自HRESULT的異常:0x80070005(E_ACCESSDENIED))。

我見過的所有解決方案都是編輯DCOM設置以允許應用程序池/認證用戶/ IUSR /網絡服務/我可能會忘記其中一兩個適合我的實例IIS。 (我們在7.5)

我們所有的Intranet應用程序都通過Internet選項>安全設置>本地Intranet區域使用帶有當前用戶名和密碼選項的自動登錄,並且我們所有的應用程序在整個會話中模擬客戶端。

按照我發現的建議,我已經在全局級別設置了DCOM設置,以及本地Microsoft Word應用程序級別和我知道我的用戶在其中的Active Directory組,並繼續得到相同的錯誤。

在嘗試看看我是否能與應用程序池的身份工作,而不是我想這樣的:

private static WindowsImpersonationContext context = null; 
context = WindowsIdentity.Impersonate(System.IntPtr.Zero); 

,並給了DCOM設置權限IIS應用程序池\ MyAppPoolName,但錯誤仍然存​​在。

我現在找不到鏈接,但我嘗試過的另一個解決方案是將桌面文件夾添加到以下位置,這是由於某種錯誤,併爲我的用戶和/或應用池ID訪問這些錯誤。這也沒有奏效。

C:\ WINDOWS \ system32 \設置\ systemprofile \

C:\ WINDOWS \ Syswow64資料\ CONFIG \ systemprofile \

如果任何人有意見了,我很願意聽到他們的聲音。我完全沒有想法。如果我沒有提供足夠的信息,我會很樂意提供更多信息。感謝您提供任何幫助。

回答

0

您不能使用下面的代碼實例化一個新的文檔在Word:

Document wordDoc = new Document(); 

相反,你需要使用Add方法來添加新文檔到文檔集合:

wordApp.Documents.Add(); 

你可能會發現How to: Programmatically Create New DocumentsHow to automate Microsoft Word to create a new document by using Visual C#文章有幫助。

請注意,Microsoft目前不推薦並且不支持來自任何無人值守的非交互式客戶端應用程序或組件(包括ASP,ASP.NET,DCOM和NT服務)的Microsoft Office應用程序自動化,因爲Office在此環境中運行時可能會出現不穩定的行爲和/或死鎖。

如果您正在構建一個在服務器端上下文中運行的解決方案,則應該嘗試使用對於無人執行安全的組件。或者,您應該嘗試找到允許至少部分代碼運行客戶端的替代方案。如果您從服務器端解決方案使用Office應用程序,則該應用程序將缺少成功運行所需的許多必要功能。此外,您將面臨整體解決方案穩定性的風險。請閱讀​​文章中的更多內容。

作爲解決方法,如果僅處理打開的XML文檔,則可以考慮使用Open XML SDK。或者考慮使用爲服務器端執行而設計的任何第三方組件。

相關問題