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

时间:2010-08-09 17:48:38

标签: c# excel interop scheduled-tasks

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

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应用程序,但没有运气。

我使用的是Windows 7 Enterprise 64位。不确定下一步应该是什么,感谢任何帮助

4 个答案:

答案 0 :(得分:2)

错误80070005 COM拒绝访问错误。 您确定您的凭据能够实例化Interop库吗? 检查此link并按照一些调试步骤进行操作 (我知道你说你已经完成了DCOMConfig的事情,但是在这个链接中有更多的测试场景,希望这里的东西可以帮助你

答案 1 :(得分:2)

我最终编写了一个Windows服务来调用包含Excel生成代码的库。这解决了错误。但是,在调用workbook.Save()方法时还有另一个COM异常。无论我尝试什么,这个错误都不会消失。我读了另一篇文章,其中说这是一项安全预防措施,因此也是设计上的。

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

感谢输入funkymushroom。希望这篇文章对于其他正在努力使用Excel Interop自动化的人有所帮助。

答案 2 :(得分:0)

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

DCOM配置

  1. 点击开始 - >运行
  2. 输入DCOMCNFG并按OK。这将打开DCOMCNFG窗口。
  3. 浏览树到控制台根目录 - >组件服务 - >计算机 - >我的电脑
  4. 右键单击“我的电脑”,然后选择属性
  5. 选择“默认属性”选项卡
    • 在此计算机上启用分布式COM - 选中选项
    • 默认身份验证级别 - 设置为连接
    • 默认模拟级别 - 设置为识别
  6. 选择“COM安全性”选项卡
  7. 点击访问权限'编辑默认值 一个。添加“匿名”,“所有人”,“互动”,“网络”,“系统”,并设置本地和远程访问权限。
  8. 点击启动和激活权限'编辑默认值 一个。添加“匿名”,“所有人”,“互动”,“网络”,“系统”,并设置本地和远程访问权限。
  9. 点击OK
  10. 关闭DCOMCNFG窗口
  11. 稍后我在打开Excel时遇到异常。因此,请确保服务器上有以下路径。

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

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

答案 3 :(得分:0)

我也有这个问题 - 事实证明,在计划任务中,我需要勾选任务设置的常规选项卡上的“以最高权限运行”框。这解决了这个问题 - 它很简单!希望它也可以帮助其他人。