2009-09-29 61 views
29

我在Visual Studio 2008中遇到了C#ASP .NET項目的問題 當我用Windows 7旗艦版(x64)重新安裝我的電腦時, 。爲了這個我還使用Office 2007的System.UnauthorizedAccessException:爲Word Interop檢索COM類工廠失敗,錯誤80070005

我得到的錯誤信息是:

System.UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005. at xxx.Utility.WordDocument..ctor(String filePath, HttpServerUtility util) at customer_communication.BuCreate_click(Object sender, EventArgs e) in c:\xxx\Website\customer\communication.aspx.cs:line 127

+0

也許您應該向我們展示'c:\ xxx \ Website \ customer \ communication.aspx.cs'文件的內容,以便我們可以瞭解您要做什麼。 – Joren

+1

COM Guid在谷歌上回復了很多關於Microsoft Office的引用,特別是版本2003.我認爲這是沒有安裝2003的互操作組件的直接結果? – Gregory

+1

史詩題目!我喜歡它:D –

回答

25

這是我對於這個問題的解決辦法:

我使用的是Win 7的64位和Office 2007

運行程序 「DCOMCNFG -32」。 (你不能找到Word和Excel組件,如果它在64位運行)

轉到「控制檯根節點/組件服務/計算機/我的電腦/ DCOM配置/」 查找Microsoft Word和Excel,然後選擇屬性。

轉到安全性並選擇「配置權限」下的「自定義」(如果需要,您可能還想更改其他權限,但我不需要) 添加「IIS_IUSRS」並將其設置爲「完全控制」

現在去‘身份’,然後選擇‘交互式用戶完成後OK‘’

不要忘記按’:d

我希望這可以幫助你解決問題,並還有其他誰來這裏讀這個。

+0

感謝您的文章,它幫助我解決了我的問題。您必須爲「Microsoft Excel預覽器」對象執行相同的步驟。 – thiag0

+1

正確的寫作是'DCOMCNFG/32' 欲瞭解更多信息,請參閱[這個答案](http://stackoverflow.com/a/7767364/701988) – sra

+5

我使用的是64位的Win7和Office 2010(32位),一在「組件服務」中我沒有看到任何關於MS Word的信息。我能做什麼? – Jacek

1

此錯誤對應於.NET System.UnauthorizedAccessException的,通常是由錯誤的設置引起訪問COM上您的代碼嘗試創建的組件。

您可能會嘗試啓動dcomcnfg實用程序,轉到DCOM設置,選擇所需的對象並允許訪問您的ASP.NET代碼所運行的帳戶。它應該解決你的問題。

+0

這是真的,但是如果你運行Windows 7 64bit,你必須啓動dcomcnfg作爲32位: 「dcomcnfg -32」。 如果你不用,你不會找到Word或Excel設置權限 –

8

你應該授予ASP.NET進程標識({MACHINE} \ ASPNET在IIS 5或IIS 6上網絡服務)到Word COM組件的訪問:

「控制面板 - 管理工具 - 組件服務 - 計算機 - 我的電腦 - DCOM配置」

瞭解「Microsoft Word文檔」,右鍵 - 設置 - 安全選項卡,授予ASP.NET進程標識訪問(本地和遠程)( 「ASPNET」 爲IIS 5,IIS 6的「網絡服務」)。


如果那麼你得到一個 「System.Runtime.InteropServices.COMException(0x800A13E9):沒有足夠的內存,現在保存該文檔。」打開/添加文檔時出現異常(我自己的見解),只是從%Temp%和\ Content.Word文件夾中刪除臨時文件。

+8

我有同樣的問題,但無法在DCOM配置中找到「Microsoft Word文檔」。 –

+1

「Microsoft Word文檔」使用MS Office語言進行本地化。例如,在俄語中,它被命名爲「Microsoft Word」Документ。您也可以嘗試在右欄(使用表格視圖)中通過CLSID {000209FF-0000-0000-C000-000000000046}找到它。 –

+0

「本地和遠程」選項位於「安全」選項卡的「啓動和激活權限」組內。 –

6

這對我來說很難理解,也許我的Windows mojo技能只是低於標準。但是我無法使組件服務在Windows Server 2008上以32位模式運行。希望這可以幫助有相同問題的其他人:

  1. 通過前面提到的任一方法(運行框或管理工具)運行組件服務;關閉該程序
  2. 將「C:\ Windows \ System32 \ mmc.exe」/ 32粘貼到運行框中並按Enter鍵(在任務管理器中驗證您看到mmc.exe * 32)
  3. 轉到文件,應在列表中看到comexp.msc(因爲步驟1),選擇它,它將在32位模式MMC控制檯中打開組件服務。

編輯:爲了完整起見,爲了讓Word Interop在Windows Server 2008上工作,我還必須創建如this answer中概述的桌面文件夾。

+1

您可以在運行框 – MrK

+0

中簡單地使用命令'MMC comexp.msc/32'很酷,謝謝MrK。 – sliderhouserules

2

修復到托馬斯的回答,基於Windows Server 2K8的x64正確的命令是:「DCOMCNFG/32」(削減,而不是 - )

而且我不得不享有充分權利的午餐和添加IIS_IUSRS自定義所有的安全選項激活權限,訪問權限和配置權限。還有「身份」選項卡中的交互式用戶。然後它爲我工作。

我有Word 2010打開文檔文件的這個問題,我不得不將它設置爲Microsoft Word 97-2003文檔屬性。

+0

我也認爲你需要以管理員身份運行dcomcnfg才能運行! – mortb

4

啓動dcomcnfg -32dcomcnfg /32都未能在列表中顯示目標應用程序(Microsoft Excel)。

但是我按照說明@How to make IIS7 play nice with Office Interop,特別是有關啓動mmc -32和手動添加組件服務管理單元中的注意事項,我能夠讓它出現。 (注意:儘管鏈接談到IIS7,但我的問題是Windows服務)。

  1. 開始>運行> DCOMCNFG(或「MMC -32「,然後添加組件服務管理單元手動,如果你不能找到下步驟3中的應用程序)
  2. 導航到組件服務>計算機>我的電腦> DCOM配置
  3. 找到MS應用程序給你的麻煩(如:「Microsoft Excel應用程序」爲Excel或「Microsoft Word 97中 - 2003文檔」的Word)
  4. 右鍵點擊>屬性
  5. 在安全性選項卡:選擇啓動和激活權限下的自定義,然後單擊編輯...
  6. 添加網站正在運行的帳戶(例如:網絡服務)並分配本地啓動&本地激活權限
  7. 瞧!
0

我有同樣的問題,最後是因爲我的用戶沒有權限運行服務「遠程過程調用(RPC)」。 在控制面板的管理工具中,我查找了該服務,並在登錄中單擊「本地系統帳戶」,我重新啓動了系統並解決了問題。

5

這爲我工作:

  1. 在命令行中把DCOMCNFG
  2. 組件服務 - >計算機 - >我的電腦 - > DCOM配置
  3. 查找 「微軟的Word 97 - 2003文檔」(如果缺少檢查,如果您的Word也是64位)
  4. 右鍵 - >屬性
  5. 轉到安全選項卡,然後編輯「自定義」單選按鈕,這樣IIS_IUSRS可能對啓動和訪問權限
  6. 轉到標籤標識,並選擇「交互式用戶」
  7. 應用更改,然後再試一次
  8. 如果這一切失敗,還請到「常規」標籤,並在「身份驗證級別」下拉菜單中選擇「無」 。
0

我測試所有上面的方法,也標記爲答案,但在Windows服務器,當用戶不活躍或註銷,獲取訪問異常。所以:

  1. 我創建本地計算機上的用戶並將其添加到兩組: IIS_USER管理員
  2. 組件服務 - >計算機 - >我的電腦 - > DCOM配置
  3. 在com +對象中,我更改爲使用此用戶運行Microsoft Word 97 - 2003文檔組件。 See it here
  4. 還添加IIS_USER,也應用程序用戶身份(IIS APPPOOL \ [名])到保衛科所有三個部分並進行充分的許可成爲可能。 See it here

辦公室將與來自用戶,你在第一步創建設置運行,因此,如果您更改該用戶的任何設置。 120%沒有問題。嘗試了3個不同的服務器。

相關問題