2009-12-30 120 views
12

背景:
我在工作中烤了我的舊硬盤,正在獲得一個新硬盤。有了這個,我將不得不重建我的機器。我的經理在他的筆記本電腦上安裝了Windows 7,我一直在使用筆記本電腦,而這些筆記本電腦不在調試狀態。但我遇到了一個問題。Windows 7 .net Excel .SaveAs()來自HRESULT的錯誤異常:0x800A03EC

我們有相當數量的應用程序使用Microsoft.Office.Interop.Excel參考。到目前爲止,我已經經歷了一些錯誤,但是最近幾天我一直堅持使用這個錯誤(我的機器在第一次重建後實際上遭遇了硬盤驅動器故障),並且一直無法找到修復程序。我已經搜索了這個錯誤,但無法找到任何人在Windows 7上有這個問題,雖然我已經嘗試了Windows Server 2008的其他修補程序無濟於事。

如果我無法解決此問題,我將無法使用Windows 7,並希望知道在重建計算機之前,必須先擦除它並重新啓動(第三次)。

問題:
OS:Windows 7企業
錯誤消息:從HRESULT異常:0x800A03EC
代碼:

Private m_xls As Microsoft.Office.Interop.Excel.Application 
Private m_wkbk As Microsoft.Office.Interop.Excel.Workbook 
Private m_wksht As Microsoft.Office.Interop.Excel.Worksheet 
m_xls = New Application 
m_xls.Visible = False : m_xls.DisplayAlerts = False 
m_wkbk = m_xls.Workbooks.Open(Me.FilePath) 
m_wksht = CType(m_wkbk.ActiveSheet, Worksheet) 
'...Write some data...' 
m_wkbk.SaveAs(Me.FilePath, XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, False, False, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value) 

上最後一行時出現錯誤。

我試過到目前爲止:

  1. 更改程序池使用 NetworkService帳戶(這是 「ApplicationPoolIdentity」我 不能在用戶列表中找到 安全設置) 。然後將 NetworkService帳戶完全訪問 到適當的文件夾。
  2. 給予網絡服務訪問所有的「Microsoft Excel應用程序」設置在DCOMCNFG
  3. 運行此命令「appcmd設置配置-section:ASP -enableParentPaths:真實的」,因爲這是我能找到的
  4. 使用的唯一的其他東西。 SaveCopyAs()哪些工作,但導致不同的錯誤

我只是想看看是否有其他人已經遇到這個或沒有,因爲Windows 7是新的。我可以使用Server 2008,但是我想告訴我的經理它不起作用之前,我想有一些可靠的推理。

謝謝 傑夫

+0

我會建議使用http://download.cnet.com/Filemon/3000-2094_4-10020837.html。 FileMon,可以告訴你什麼是goind擰在這裏。 **另存爲**似乎是一個鎖或認證問題。如果您需要更多信息,請說明... – 2009-12-30 17:44:42

+0

此鏈接是否有幫助? http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15 – shahkalpesh 2009-12-30 18:03:10

+0

@shahkalpesh:謝謝是的,我之前看過,但沒有解決我的問題。 – 2009-12-30 19:14:46

回答

15

注意:這需要精簡一下,因爲它是我在內部wiki上所做的所有修復的彙編,但我不確定哪些更改會使其工作,因此我將它包括在內。

解決方案:

下面的變化可能是如何解決這個問題的一個超集。

- 運行DCOMCNFG.exe並導航到'組件服務>計算機>我的電腦'。
- 右鍵單擊​​「我的電腦」,然後單擊「屬性」。
- 打開'COM Security'選項卡。爲每個列出的按鈕添加您的帳戶('訪問權限'&'啓動並激活權限'下的'編輯限制...'和'編輯默認...'按鈕)。爲您的帳戶提供所有訪問選項。點擊'應用',然後'確定'。
- 雖然仍在DCOMCNFG中,請展開「我的電腦」鏈接並打開「DCOM配置」文件夾。
- 右鍵單擊​​「Microsoft Excel應用程序」並選擇「屬性」。
- 在「安全」選項卡下,爲「啓動和激活權限」和「配置權限」選擇「自定義」選項。對於兩個點擊'編輯...'按鈕。讓您的帳戶訪問所有內容。
- 雖然仍在「Microsoft Excel應用程序」的「屬性」中,轉到「標識」選項卡。
- 選擇「交互式用戶」選項。
- 點擊'應用',然後'確定'。
- 重新啓動您的計算機。

- 嘗試以下DCOMCNFG & ApplicationPoolIdentity變化。

- 以管理員身份運行命令提示符。
-Navigate到C:\ WINDOWS \ SYSTEM32 \ INETSRV>運行 'appcmd設置配置-section:ASP -enableParentPaths:真正的'

或者您可以使用.SaveCopyAs(),雖然這可能還沒有解決這個問題,將需要更改代碼。

DCOMCNFG對於Windows 7:

此錯誤發生在 '的Excel應用=新的應用程序();'呼籲

此鏈接詳細介紹如何修復XP/Server 2003中的問題,但可以適用於Windows 7中:http://blog.crowe.co.nz/archive/2006/03/02/589.aspx

我沒有/找不到一個「ASPNET」帳戶。您必須檢查應用程序池以瞭解應用程序的運行方式。
爲此,進入'計算機管理>服務和應用程序> Internet信息服務>應用程序池'
右鍵單擊相應的AppPool並選擇'高級設置'。在'流程模型>標識'下,您可以找到它正在運行的帳戶。我是'ApplicationPoolIdentity',我也無法找到,所以我將它改爲'網絡服務',如Windows Server 2003.
一旦設置了這個,運行DCOMCNFG.exe。導航到'組件服務>計算機>我的電腦> DCOM配置'。
找到並右鍵單擊「Microsoft Excel應用程序」並選擇「屬性」。 選擇'安全'選項卡。在「啓動和激活權限」下選擇「自定義」並點擊「編輯」。
然後點擊'添加...'按鈕。
輸入相應帳戶的名稱,在本例中爲「網絡服務」,然後單擊「檢查姓名」。然後點擊「確定」。
回到'啓動和激活權限'頁面,高亮顯示'網絡服務'帳戶並選中'本地啓動'和'本地激活'複選框。然後點擊「確定」。

+0

有人知道這是否是Win 7的一些怪癖,還是Jeff只是有一些非常特定的條件導致了這一點?我也爲saveAs錯誤而苦苦掙扎。 – pc1oad1etter 2010-05-18 21:32:43

+0

截至今天,這仍然是我知道處理這個問題的唯一方式,而我在2008年的其他團隊(也是Windows 6.1)也使用它來處理它。我很樂意聽到有更好的方法。 – 2010-05-19 14:31:34

+8

對於Windows 7 64位,請使用以下命令以32位模式啓動DCOMCNFG:DCOMCNFG -32否則,您將不會在列表中看到Microsoft Excel應用程序。 – 2010-12-08 17:32:58

0

確保您正在運行的程序(和EXCEL.EXE)以管理員身份,和你保存到目錄中沒有的「只讀」屬性。

此外,請嘗試傳遞完整的文件路徑,而不僅僅是文件名。

您也可以嘗試傳遞System.Reflection.Missing.Value,而不是省略可選參數。

現在想不出別的什麼。希望這可以幫助。

ShdNx

+0

我的帳戶是機器上的管理員,當我運行VS時,它以管理員身份運行。我檢查了excel.exe進程,它運行的是NetworkService,我可以訪問該目錄。 另外Me.FilePath是整個目錄。 我嘗試了Missing.Value,但得到了同樣的錯誤,所以不幸的是,這些都是我仍然堅持的好主意。雖然謝謝! – 2009-12-30 19:11:58

3

當我得到這個錯誤時,我想我開始使用。SaveCopyAs而不是SaveAs。我不確定這會對你造成什麼其他的錯誤,如果你可以在那裏詳細說明一下,那麼可能就會有這種情況。

此外,您正在做的一件事情很可能導致excel.exe在處理文件後保留在內存中。這篇文章展示了使用和釋放COM互操作對象的正確方法(http://support.microsoft.com/kb/317109)。這是一種痛苦,但它對我來說很有效,因爲它允許在應用程序關閉之前釋放這些資源。

+0

我還應該注意到我在Vista上也遇到了問題,它似乎與擁有更新版本的Office相關,而不是Windows的版本(我也可以在XP機器上重新創建,但是而不是一些與舊版本的interop程序集) – 2009-12-30 20:25:50

+0

Rick,我的問題與.SaveCopyAs是可修復的,因爲我可以修改代碼。我的問題當然不是我們使用這個的唯一地方,所以我總是需要對代碼進行編碼,所以如果這是唯一的解決方案,那麼它可能不是我追求的東西。 我們知道excel.exe的釋放,並嘗試釋放它(儘管偶爾我會去服務器上,並且不得不殺掉一些)。所以我同意,雖然這不是最好的方法,但是我們現在要改變它的主要任務是由我的經理來決定,我們是否擁有這些資源。 – 2009-12-30 20:30:58

+0

當然,我只是想提出它,因爲我自己碰到了它,並且不得不經歷弄清楚發生了什麼的麻煩。 我試了好幾個小時讓SaveAs()函數無誤地工作,並且從未發現任何不會出錯的參數組合。如果你不能使用SaveCopyAs(),我不確定最好的方法是什麼。 祝你好運! – 2009-12-30 20:48:33

0

Jeff Keslinke上面的答案最終爲我工作。您還需要查看應用程序使用的應用程序池,並確保身份正確並具有完全訪問權限和特權。

0

我得到了同樣的問題,並發現與異常代碼的應用程序崩潰錯誤:0xc0000005在Windows事件。搜索網頁並在鏈接中找到以下解決方案Excel 2010 Crash, Exception code: 0xc0000005將打開的文件的文件擴展名從xlsx重命名爲zip。該解決方案適用於我的情況。

相關問題