Windows 7 .net Excel .SaveAs()错误exception来自HRESULT:0x800A03EC
背景:
我在工作中烤了我的旧硬盘,正在换新的硬盘。 有了这个,我将不得不重build我的机器。 我的经理已经安装了他的笔记本电脑上安装了Windows 7,而我的机器已经不在使用了。 但是我遇到了一个问题。
我们有相当数量的应用程序使用Microsoft.Office.Interop.Excel参考。 到目前为止,我已经经历了一些错误,但是过去几天我一直坚持的错误(我的机器在第一次重build之后实际上遭遇了硬盘驱动器故障),并且无法find修复方法。 我已经search这个错误,但无法find任何人在Windows 7上有这个问题,虽然我已经尝试了Windows Server 2008的其他修补程序无济于事。
如果我不能解决这个问题,我将无法使用Windows 7,并希望知道在重build机器之前,只能擦除它并重新启动(第三次)。
问题:
操作系统:Windows 7企业版
错误消息:从HRESULTexception: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”,因为这是我唯一能find的其他东西
- 使用.SaveCopyAs()工作,但导致不同的错误
我只是想看看,因为Windows 7是新的,是否有其他人遇到这个问题。 我可以去服务器2008年,但我想有一些坚实的理由之前,我告诉我的经理不会工作。
谢谢杰夫
注意:这需要简化一下,因为它是我在内部wiki上所做的所有修复的汇编,但是我不确定哪些修改使得它可以正常工作,所以我将把它包括在内。
解:
以下更改可能是如何解决此问题的超集。
– 运行DCOMCNFG.exe并导航到“组件服务>计算机>我的电脑”。
– 点击“我的电脑”,然后点击“属性”。
打开“COM安全”选项卡。 在“访问权限”和“启动并激活权限”下为每个列出的button(“编辑限制…”和“编辑默认…”button)添加您的帐户。 为您的帐户提供所有访问选项。 点击“应用”,然后“确定”。
– 仍然在DCOMCNFG中展开“我的电脑”链接并打开“DCOMconfiguration”文件夹。
– 右键单击“Microsoft Excel应用程序”,然后select“属性”。
– 在“安全”选项卡下,select“启动和激活权限”和“configuration权限”的“自定义”选项。 对于两个点击'编辑…'button。 让您的帐户访问一切。
– 虽然仍然在“Microsoft Excel应用程序”的“属性”中,转到“标识”选项卡。
– select“交互式用户”选项。
点击“应用”,然后“确定”。
-重启你的电脑。
– 尝试下面的DCOMCNFG &ApplicationPoolIdentity更改。
以pipe理员身份运行命令提示符。
– 导航到c:\ Windows \ System32 \ inetsrv>然后运行'appcmd set config -section:asp -enableParentPaths:true'
或者你可以使用.SaveCopyAs(),虽然这可能仍然不能解决问题,并将需要更改代码。
DCOMCNFG对于Windows 7:
这个错误发生在'Excel应用程序=新应用程序();' 电话
此链接详细信息如何解决XP / Server 2003的问题,但可以适应Windows 7: http : //blog.crowe.co.nz/archive/2006/03/02/589.aspx
我没有/找不到“ASPNET”帐户。 您必须检查应用程序池以找出应用程序正在运行的内容。
为此,请进入“计算机pipe理”>“服务和应用程序”>“Internet信息服务”>“应用程序池”
右键单击相应的AppPool并select“高级设置”。 在“stream程模型”标识下,您可以find正在运行的帐户。 我是'ApplicationPoolIdentity',我也找不到,所以我把它改成'Network Service'就像Windows Server 2003一样。
一旦这设置运行DCOMCNFG.exe。 导航到“组件服务”>“计算机”>“我的电脑”>“DCOMconfiguration”。
find并右键单击“Microsoft Excel应用程序”,然后select“属性”。 select“安全”选项卡。 在“启动和激活权限”下select“自定义”,然后点击“编辑”。
然后点击“添加…”button。
input相应帐户的名称,在本例中为“networking服务”,然后点击“检查名称”。 然后点击“确定”。
返回“启动和激活权限”页面,高亮显示“networking服务”帐户,并选中“本地启动”和“本地激活”checkbox。 然后点击“确定”。
当我得到这个错误,我想我开始使用.SaveCopyAs而不是SaveAs。 我不确定这会给你带来什么其他的错误,如果你能在那里详细说明一下,那么可能就可以找出这种情况了。
另外,你正在做的一件事情很可能导致excel.exe在处理文件之后留在内存中。 这里是一个文章,显示正确的方式来使用和释放COM互操作对象( http://support.microsoft.com/kb/317109 )。 这是一个痛苦,但它对我来说,在应用程序closures之前允许这些资源被释放。
确保以pipe理员身份运行程序(和EXCEL.EXE),并且保存的目录不具有“只读”属性。
此外,尝试传递完整的文件path,而不仅仅是文件名。
您也可以尝试传递System.Reflection.Missing.Value,而不是省略可选参数。
现在不能想到其他的东西。 希望这可以帮助。
ShdNx
Jeff Keslinke的上面答案最终为我工作。 您还需要查看您的应用程序正在使用的应用程序池,并确保身份正确并具有完全访问权限和特权。
我得到了同样的问题,并发现exception代码的应用程序崩溃错误:0xc0000005在Windows事件。 search网页,并在Excel 2010 Crash,exception代码:0xc0000005的链接中find以下解决scheme将打开的文件的文件扩展名从xlsx重命名为zip。 该解决scheme适用于我的情况。
尝试打开ISS。 这里提到的Windows 7的细节
http://helpdeskgeek.com/windows-7/turn-on-microsoft-internet-information-services-in-windows-7/