执行Excel Interop的C#控制台应用程序 – 按计划运行时失败Task -System.UnauthorizedAccessException

正如标题所述,我有一个C#控制台应用程序,它使用互操作来打开Excel并创build一个新的工作簿。 当通过命令行运行控制台应用程序时,代码工作正常。 但是,通过计划任务运行控制台应用程序时会引发此exception:

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() 

计划的任务设置为使用我的凭据(我是pipe理员)。 基于其他论坛,我确信我已经完全控制我的帐户在组件服务 – >计算机 – >我的电脑 – > DComconfiguration – > Microsoft Excel应用程序,但没有运气。

我在Windows 7企业版64位。 不知道下一步应该是什么,任何帮助表示赞赏

错误80070005是COM访问被拒绝错误。 你确定你的凭证能够实例化Interop库吗? 检查这个链接,并按照一些debugging步骤。
我知道你说你已经做了DCOMConfig的事情,但在这个链接有更多的testing场景,希望在这里可以帮到你

最后,我写了一个windows服务来调出一个包含Excel代码的库。 这修正了错误。 但是,在调用workbook.Save()方法时还有另一个COMexception。 不pipe我怎么想,错误都不会消失。 我读了另一篇文章,说这是一个安全预防措施,因此是devise。

但是,调用工作簿。 SaveAs()将产生相同的结果,并从Windows服务调用时工作正常。

感谢您inputfunkymushroom。 希望这篇文章能够帮助别人解决Excel Interop自动化问题。

我有类似的问题,我已经通过执行以下步骤解决了这个问题。

DCOMconfiguration

  1. 点击开始 – >运行
  2. inputDCOMCNFG,然后按确定。 这将打开DCOMCNFG窗口。
  3. 向下浏览树到控制台根目录 – >组件服务 – >计算机 – >我的电脑
  4. 右键单击“我的电脑”并select属性
  5. select“默认属性”选项卡
    • 在这台计算机上启用分布式COM – 选项被选中
    • 默认身份validation级别 – 设置为连接
    • 默认模拟级别 – 设置为识别
  6. select“COM安全”选项卡
  7. 点击访问权限编辑默认a。 添加“匿名”,“所有人”,“交互”,“networking”,“系统”,设置本地和远程访问权限。
  8. 点击启动和激活权限编辑默认a。 添加“匿名”,“所有人”,“交互”,“networking”,“系统”,设置本地和远程访问权限。
  9. 点击确定
  10. closuresDCOMCNFG窗口

后来我在打开Excel的时候出现exception。 所以请确保服务器上有以下path可用。

  • C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \桌面
  • C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \应用程序数据\漫游\微软
  • C:\ WINDOWS \ Syswow64资料\ CONFIG \ systemprofile \应用程序数据\本地\微软

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

我也有这个问题 – 事实certificate,在计划的任务,我需要勾选任务设置的常规选项卡上的“以最高权限运行”框。 这解决了这个问题 – 非常简单! 希望它也能帮助别人。