Windows 7 .net Excel .SaveAs() 來自 HRESULT 的錯誤異常:0x800A03EC
背景:
我在工作中烤了我的舊硬碟驅動器,正在買一個新的。有了這個,我將不得不重建我的機器。我的經理在他的借用筆記型電腦上安裝了 Windows 7,而我的機器出現故障時我一直在使用該筆記型電腦。但是我遇到了一個問題。
我們有大量使用 Microsoft.Office.Interop.Excel 參考的應用程序。到目前為止,我已經解決了一些錯誤,但最近幾天我一直堅持的錯誤(我的機器在第一次重建後實際上遭受了硬碟驅動器故障)並且無法找到修復程序。我已搜尋此錯誤,但在 Windows 7 上找不到任何遇到此問題的人,儘管我嘗試了 Windows Server 2008 的其他修復但無濟於事。
如果我不能解決這個問題,我將無法使用 Windows 7,並且想知道在我重建機器之前只需要擦除它並重新啟動(第三次)。
問題:
作業系統:Windows 7 Enterprise
錯誤消息: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)錯誤發生在最後一行。
到目前為止我已經嘗試過:
- 更改 AppPool 以使用 NetworkService 帳戶(它是“ApplicationPoolIdentity”,我在安全設置的使用者列表中找不到它)。然後授予 NetworkService 帳戶對相應文件夾的完全訪問權限。
- 授予 NetworkService 訪問 DCOMCNFG 中所有“Microsoft Excel 應用程序”設置的權限
- 執行此命令“appcmd set config -section:asp -enableParentPaths:true”,因為這是我能找到的唯一其他東西
- 使用有效但導致不同錯誤的 .SaveCopyAs()
我只是想看看其他人是否遇到過這個問題,因為 Windows 7 是新的。我可以使用 Server 2008,但我想在告訴我的經理它行不通之前有一些可靠的理由。
謝謝你,傑夫
注意:這需要稍微精簡一下,因為它是我在內部 wiki 上所做的所有修復的彙編,但我不確定哪些更改子集使它起作用,所以我將其全部包含在內。
解決方案:
以下更改可能是如何解決此問題的超集。
- 執行 DCOMCNFG.exe 並導航到“組件服務>電腦>我的電腦”。
-右鍵點擊“我的電腦”,然後點擊“屬性”。
打開“COM 安全”選項卡。為列出的每個按鈕添加您的帳戶(“訪問權限”和“啟動和啟動權限”下的“編輯限制…”和“編輯預設值…”按鈕)。為您的帳戶提供所有訪問選項。點擊“應用”,然後點擊“確定”。
當仍在 DCOMCNFG 中時,展開“我的電腦”連結並打開“DCOM 配置”文件夾。
右鍵點擊“Microsoft Excel 應用程序”並選擇“屬性”。
在“安全”選項卡下,選擇“啟動和啟動權限”和“自定義”選項 配置權限”。兩者都點擊“編輯…”按鈕。讓您的帳戶訪問所有內容。
當仍在“Microsoft Excel 應用程序”的“屬性”中時,轉到“身份”選項卡。
選擇“互動式使用者”選項。
點擊“應用”,然後點擊“確定”。
-重啟你的電腦。
-嘗試以下DCOMCNFG和 ApplicationPoolIdentity 更改。
- 以管理員身份執行命令提示符。
-導航到 c:\Windows\System32\inetsrv> 並執行 ‘appcmd set config -section:asp -enableParentPaths:true’
或者,您可以使用 .SaveCopyAs() 雖然這可能仍然無法解決問題並且需要更改程式碼。
DCOMCNFG 對於 Windows 7:
此錯誤發生在“Excel app = New Application();”上 來電
此連結詳細說明瞭如何解決 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 應用程序”並選擇“屬性”。選擇“安全”選項卡。在“啟動和啟動權限”下選擇“自定義”並點擊“編輯”。
然後點擊“添加…”按鈕。
鍵入相應帳戶的名稱,在本例中為“網路服務”,然後點擊“檢查名稱”。然後點擊“確定”。
返回“啟動和啟動權限”頁面,突出顯示“網路服務”帳戶並選中“本地啟動”和“本地啟動”複選框。然後點擊“確定”。