C#控制台应用程序使用Excel Interop - 当作为计划任务运行时失败 - System.UnauthorizedAccessException

4

正如标题所述,我有一个使用interop打开Excel并创建新工作簿的C#控制台应用程序。当通过命令行运行控制台应用程序时,代码可以正常工作。然而,当通过计划任务运行控制台应用程序时,会抛出此异常:

System.UnauthorizedAccessException: Retrieving the COM class factory for component   with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80070005

该错误是从以下函数调用中引发的:

_xlApp = new Excel.Application()

计划任务设置为使用我的凭据(我是管理员)。根据其他论坛的建议,我已经确保在组件服务-->计算机-->我的计算机-->DCOM配置-->Microsoft Excel应用程序中授予了我的账户完全控制权,但没有运气。

我使用的是64位Windows 7企业版。不确定下一步该怎么做,需要任何帮助。

4个回答

2
错误代码80070005是COM访问被拒绝的错误。 请确认您的凭据是否具有实例化Interop Library的能力? 点击此链接并按照其中一些调试步骤指引,检查是否存在问题。
我知道你已经做了DCOMConfig操作,但是此链接中有更多测试场景,希望这里有助于解决你的问题

我尝试了本地安全策略和DCOM配置下的所有步骤,但仍然出现相同的错误。 - cyrix86
我有实例化Interop库的权限。我已经通过命令行/资源管理器成功运行了此应用程序。它只在计划任务下失败。 - cyrix86
预定任务是否以不同的用户身份运行? - funkymushroom
我不确定,也许你想将其作为服务运行。 请参阅http://support.microsoft.com/kb/137890以了解如何将命令行工具作为服务运行。这可能是另一种方法。 - funkymushroom
对于一个服务而言,与其关注时间安排,更重要的是确认该服务能否在您的凭据下运行。 您可以将此服务安排在每周的特定时间启动(虽然这很糟糕/不太优雅)。我明白您不想采用后者的方式,那会花费大量时间并增加额外的风险。您尝试编写powershell脚本或vbs来实例化Excel互操作性了吗? - funkymushroom
显示剩余2条评论

2
我最终编写了一个Windows服务来调用包含Excel生成代码的库。这解决了错误。然而,在调用workbook.Save()方法时,出现了另一个COM异常。无论我尝试什么,错误都不会消失。我读到另一篇文章,指出这是一项安全预防措施,因此是设计上的问题。
然而,调用workbook.SaveAs()将产生相同的结果,并且在从Windows服务中调用时正常工作。
感谢funkymushroom的帮助。希望本文对于其他在Excel Interop自动化方面遇到困难的人有所帮助。

0
我也遇到了这个问题 - 原来在计划任务中,我需要在任务设置的“常规”选项卡上勾选“使用最高权限运行”的框。这解决了问题 - 真是太简单了!希望能对其他人有所帮助。

0

我曾经遇到过类似的问题,通过以下步骤解决了该问题。

DCOM配置

  1. 点击开始->运行
  2. 输入DCOMCNFG并按下确定。这将打开DCOMCNFG窗口。
  3. 浏览树形结构至控制台根目录 -> 组件服务 -> 计算机 -> 我的电脑
  4. 右键单击“我的电脑”并选择属性
  5. 选择“默认属性”选项卡
    • 在此计算机上启用分布式COM - 选项已勾选
    • 默认身份验证级别 - 设置为连接
    • 默认模拟级别 - 设置为标识
  6. 选择“COM安全”选项卡
  7. 单击访问权限 ' 编辑默认值 a. 添加“匿名”,“每个人”,“交互式”,“网络”,“系统”并设置本地和远程访问权限。
  8. 单击启动和激活权限 ' 编辑默认值 a. 添加“匿名”,“每个人”,“交互式”,“网络”,“系统”并设置本地和远程访问权限。
  9. 单击确定
  10. 关闭DCOMCNFG窗口

后来我在打开Excel时遇到了异常。请确保服务器上存在以下路径。

  • C:\Windows\SysWOW64\config\systemprofile\Desktop
  • C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\Microsoft
  • C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft

这可能会对像我这样的人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接