Windows 7 .net Excel .SaveAs()来自HRESULT的错误异常:0x800A03EC

时间:2009-12-30 17:37:24

标签: .net excel windows-7

背景:
我在工作时给我的旧硬盘敬酒了,我正在换一个新硬盘。有了它,我将不得不重建我的机器。我的经理在他的借用笔记本电脑上安装了Windows 7,我一直在使用我的机器没有通信。但我遇到了一个问题。

我们有相当数量的应用程序使用Microsoft.Office.Interop.Excel参考。到目前为止,我已经遇到了一些错误但过去几天我一直坚持的错误(我的机器实际上在第一次重建后遭遇硬盘驱动器故障)并且无法找到修复程序。我已经搜索过此错误,但在Windows 7上找不到任何有此问题的人,尽管我尝试过其他Windows Server 2008修复程序无济于事。

如果我无法解决这个问题,我将无法使用Windows 7,并且想要知道在重建机器之前只需要擦除它并重新开始(第三次)。

问题:
操作系统: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. 更改AppPool以使用 NetworkService帐户(它是 'ApplicationPoolIdentity'我 在用户列表中找不到 安全设定)。然后给予 NetworkService帐户完全访问权限 到适当的文件夹。
  2. 使NetworkService能够访问DCOMCNFG中的所有“Microsoft Excel应用程序”设置
  3. 运行此命令“appcmd set config -section:asp -enableParentPaths:true”因为这是我能找到的唯一一件事
  4. 使用.SaveCopyAs()虽然有效但导致了不同的错误
  5. 我只想知道是否有其他人遇到过此问题,因为Windows 7是新的。我可以使用Server 2008,但在我告诉我的经理它不起作用之前我想有一些坚实的推理。

    谢谢你, 杰夫

6 个答案:

答案 0 :(得分:16)

注意:这需要缩小一点,因为它是我在内部维基上所做的所有修复的汇编,但我不确定哪些更改子集使其工作,所以我将包括它。

<强>解决方案:

以下更改可能是如何解决此问题的超集。

- 运行DCOMCNFG.exe并导航至“组件服务&gt;计算机&gt;我的电脑”。
- 右键单击​​“我的电脑”,然后单击“属性” - 打开“COM安全”选项卡。为列出的每个按钮添加您的帐户(“访问权限”下的“编辑限制...”和“编辑默认...”按钮&amp;'启动和激活权限')。为您的帐户提供所有访问选项。点击“应用”,然后点击“确定” - 仍然在DCOMCNFG中展开“我的电脑”链接并打开“DCOM Config”文件夹。
- 右键单击​​“Microsoft Excel Application”并选择“属性” - 在“安全”选项卡下,选择“启动和激活权限”和“配置权限”的“自定义”选项。两者都单击“编辑...”按钮。让您的帐户访问所有内容 - 仍然在“Microsoft Excel应用程序”的“属性”中,转到“身份”选项卡 - 选择“交互式用户”选项 - 点击“应用”,然后“确定” - 重新启动计算机。

- 尝试以下 DCOMCNFG &amp; ApplicationPoolIdentity更改。

- 以管理员身份运行命令提示符 - 导航到c:\ Windows \ System32 \ inetsrv&gt;并运行'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'帐户。您必须检查应用程序池以找出应用程序的运行情况 要做到这一点,请进入“计算机管理&gt;服务和应用程序&gt; Internet信息服务&gt;应用程序池” 右键单击相应的AppPool,然后选择“高级设置”。在“流程模型&gt;身份”下,您可以找到正在运行的帐户。我是'ApplicationPoolIdentity',我也找不到,所以我将其改为'网络服务',如Windows Server 2003.
设置完成后,运行DCOMCNFG.exe。导航到“组件服务&gt;计算机&gt;我的电脑&gt; DCOM配置” 找到并右键单击“Microsoft Excel Application”并选择“属性”。 选择“安全”标签。在“启动和激活权限”下,选择“自定义”,然后点击“修改” 然后单击“添加...”按钮 键入相应帐户的名称,在本例中为“网络服务”,然后单击“检查名称”。然后单击“确定” 返回“启动和激活权限”页面,突出显示“网络服务”帐户,然后选中“本地启动”和“本地激活”复选框。然后单击“确定”。

答案 1 :(得分:3)

当我收到此错误时,我想我开始使用.SaveCopyAs而不是SaveAs。我不确定这会给你带来什么其他错误,如果你能详细说明那里可能会找到适合这种情况的东西。

此外,您正在做的一件事很可能是在处理文件后导致excel.exe保留在内存中。这篇文章展示了使用和释放COM互操作对象(http://support.microsoft.com/kb/317109)的正确方法。这是一个痛苦,但它允许我在应用程序关闭之前释放这些资源。

答案 2 :(得分:0)

确保以管理员身份运行程序(和EXCEL.EXE),并且保存到的目录没有“只读”属性。

另外,尝试传递完整的文件路径而不仅仅是文件名。

您也可以尝试传递System.Reflection.Missing.Value,而不是省略可选参数。

现在想不出别的什么。希望这会有所帮助。

ShdNx

答案 3 :(得分:0)

Jeff Keslinke的上述答案最终为我工作。您还需要查看应用程序正在使用的应用程序池,并确保其身份正确并具有完全访问权限。

答案 4 :(得分:0)

我遇到了同样的问题,并在Windows事件中发现了Exception代码:0xc0000005的应用程序崩溃错误。搜索Web并在链接Excel 2010 Crash, Exception code: 0xc0000005找到以下解决方案。将打开文件的文件扩展名从xlsx重命名为zip。该解决方案适用于我的情况。

答案 5 :(得分:0)

Try turning on ISS . The details are mentioned here for windows 7

http://helpdeskgeek.com/windows-7/turn-on-microsoft-internet-information-services-in-windows-7/