Dot-Net

Windows 7 .net Excel .SaveAs() 來自 HRESULT 的錯誤異常:0x800A03EC

  • September 1, 2015

背景:

我在工作中烤了我的舊硬碟驅動器,正在買一個新的。有了這個,我將不得不重建我的機器。我的經理在他的借用筆記型電腦上安裝了 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)

錯誤發生在最後一行。

到目前為止我已經嘗試過:

  1. 更改 AppPool 以使用 NetworkService 帳戶(它是“ApplicationPoolIdentity”,我在安全設置的使用者列表中找不到它)。然後授予 NetworkService 帳戶對相應文件夾的完全訪問權限。
  2. 授予 NetworkService 訪問 DCOMCNFG 中所有“Microsoft Excel 應用程序”設置的權限
  3. 執行此命令“appcmd set config -section:asp -enableParentPaths:true”,因為這是我能找到的唯一其他東西
  4. 使用有效但導致不同錯誤的 .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 應用程序”並選擇“屬性”。選擇“安全”選項卡。在“啟動和啟動權限”下選擇“自定義”並點擊“編輯”。

然後點擊“添加…”按鈕。

鍵入相應帳戶的名稱,在本例中為“網路服務”,然後點擊“檢查名稱”。然後點擊“確定”。

返回“啟動和啟動權限”頁面,突出顯示“網路服務”帳戶並選中“本地啟動”和“本地啟動”複選框。然後點擊“確定”。

引用自:https://stackoverflow.com/questions/1981395