【问题标题】:Windows 7 .net Excel .SaveAs() Error Exception from HRESULT: 0x800A03ECWindows 7 .net Excel .SaveAs() 来自 HRESULT 的错误异常:0x800A03EC
【发布时间】:2010-12-31 04:25:22
【问题描述】:

背景:
我在工作中烤了我的旧硬盘,然后又买了一个新硬盘。有了这个,我将不得不重建我的机器。我的经理在他的借用笔记本电脑上安装了 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() 有效但会导致不同的错误

我只是想看看其他人是否遇到过这个问题,因为 Windows 7 是新的。我可以使用 Server 2008,但我想在告诉我的经理它行不通之前有一些可靠的理由。

谢谢你, 杰夫

【问题讨论】:

  • 我推荐使用download.cnet.com/Filemon/3000-2094_4-10020837.html。 FileMon,可以告诉你这里有什么问题。 SaveAs 似乎是锁定或身份验证问题。说明您是否需要更多信息...
  • 这个链接有帮助吗? made4dotnet.com/Default.aspx?tabid=141&aid=15
  • @shahkalpesh:谢谢,是的,我之前确实看过,但它没有解决我的问题。
  • @astander:我尝试了旧版本的 filemon,它使我的机器崩溃,然后尝试了列出的版本,它说使用 procmon,由于“驱动程序兼容性问题”而无法工作。所以我正在使用 Process Explorer,但似乎没有什么不寻常的。什么信息有帮助,如果你让我知道,我会发布它?谢谢!
  • msdn.microsoft.com/en-us/library/… 的示例使用 false 而不是缺少两个参数。也许试试看?也可以尝试使用 Workbook 对象的 FullName 属性作为将其保存到的路径 - msdn.microsoft.com/en-us/library/…

标签: .net excel windows-7


【解决方案1】:

尝试开启 ISS 。 Windows 7 的详细信息在此处提及

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        注意:这需要稍微精简一下,因为它是我在内部 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 应用程序”并选择“属性”。 选择“安全”选项卡。在“启动和激活权限”下选择“自定义”并单击“编辑”。
        然后单击“添加...”按钮。
        键入相应帐户的名称,在本例中为“网络服务”,然后单击“检查名称”。然后点击“确定”。
        返回“启动和激活权限”页面,突出显示“网络服务”帐户并选中“本地启动”和“本地激活”复选框。然后点击“确定”。

        【讨论】:

        • 有人知道这是否是 Win 7 的一些怪癖,还是 Jeff 只是有一些非常具体的条件导致了这种情况?我也在为 saveAs 错误而苦苦挣扎。
        • 截至今天,这仍然是我所知道的处理此问题的唯一方法,我在 Server 2008(也是 Windows 6.1)上的其他团队也使用此方法来处理它。不过,我很想知道有更好的方法。
        • 对于 Windows 7 64 位,在 32 位模式下启动 DCOMCNFG,使用:DCOMCNFG -32 否则,您不会在列表中看到 Microsoft Excel 应用程序。
        • 在 Win7-64 中为我工作。我刚刚使用了解决方案部分。 +1
        • 我必须使用上述解决方案来获取 ABCPDF 以在 Windows Server 2012 R2 上将 Excel 文档转换为 PDF。我不必这样做 Windows Server 2012。
        【解决方案5】:

        当我收到此错误时,我想我开始使用 .SaveCopyAs 而不是 SaveAs。我不确定这会导致您出现哪些其他错误,如果您能详细说明,也许可以针对这种情况找出一些问题。

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

        【讨论】:

        • 我还应该注意,我在 Vista 上也遇到了这个问题,这似乎与拥有更新版本的 Office 相关,而不是 Windows 版本(我可以重新创建在 XP 机器上也是如此,但不是在一些具有旧版本互操作程序集的机器上)
        • Rick,我的 .SaveCopyAs 问题是可以解决的,因为我可以修改代码。我的问题当然是这不是我们使用它的唯一地方,所以我必须经常更改代码,所以如果这是唯一的解决方案,那么它可能不是我所追求的。我们确实知道 excel.exe 的发布并尝试发布它(尽管有时我会在服务器上运行并不得不杀死一些)。所以我同意,虽然这不是最好的方法,但现在改变它对我们来说是一项重大任务,这将取决于我的经理是否有资源。
        • 当然,我只是想把它提出来,因为我自己也遇到了,而且不得不费力地弄清楚发生了什么。我尝试了几个小时以使 SaveAs() 函数正常工作,但从未发现任何不会出错的参数组合。如果您不能使用 SaveCopyAs(),我不确定最好的方法是什么。祝你好运!
        【解决方案6】:

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

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

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

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

        ShdNx

        【讨论】:

        • 我的帐户是机器上的管理员,当我运行 VS 时,它以管理员身份运行。我检查了 excel.exe 进程,它作为 NetworkService 运行,我已授予对该目录的访问权限。 Me.FilePath 也是整个目录。我确实尝试了 Missing.Value 但得到了同样的错误,所以不幸的是,虽然这些都是好主意,但我仍然被困住了。不过谢谢!
        猜你喜欢
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 1970-01-01
        • 2021-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        相关资源
        最近更新 更多