【问题标题】:Office Interop access denied when access is当访问被拒绝时,Office 互操作访问被拒绝
【发布时间】:2014-02-03 16:51:53
【问题描述】:

我尝试使用在单独的 Windows 服务下运行的 Office.Interop 转换 Office 文档。 此服务在特定帐户(将来的用户名)下运行。

为此帐户设置了所有文件夹访问权限。当我尝试创建任何 Office 应用程序(例如,var app=new Excel.Application())时,我的代码将失败并出现异常:

检索具有 CLSID {XXXX} 的组件的 COM 类工厂失败,原因是以下错误:E_ACCESSDENIED。

好的,但是我已经为这个 CLSID 配置了 DCOM 权限!我打开 dcomcnfg.exe ,选择具有此 CLSID 的组件,打开设置,安全性并看到此服务的用户拥有此组件的所有权限。

为什么会抛出这个异常?

【问题讨论】:

  • 我认为您不能(编辑:应该)在服务中使用 Office 的东西。商业 Aspose 公司还有更多in-depth about why
  • @UweKeim 当然,您可以在窗口服务中使用 Office 互操作。
  • @UweKeim 是的,你可以!我们销售包含该功能的软件。但微软不支持
  • 我们很久以前就遇到过类似的问题。我完全忘记了,但最终我们需要以服务“运行方式”的用户身份登录到运行办公室的机器
  • 服务使用的是哪个帐号?本地系统?

标签: c# interop dcom


【解决方案1】:

Ocka 伙计们,我找到了答案。 1) 确保您已安装正确版本的 Office 2007 2) 确保您已安装 PDF\XPS 插件 3) 刚刚安装了office 和它的插件,你应该运行DCOMCNFG 并选择我的电脑->DCOM 配置。事实证明,在办公室安装后,注册表中的 CLSID 和 AppID 之间没有映射。 4) 关闭 dcomcnfg 窗口。现在注册表中有正确的映射。您应该在 HKCR\AppID 和 HKCR\CLSID 中获取与办公室相关的所有内容(其 id,例如 {XXXXXXX-XXXX...}) 5) 对于所有这些 id,您应该授予访问权限,这可以使用以下算法来实现: * 打开 HKCR\AppID{id} 键 * 设置 LaunchPermission 和 ActivatePermission 值(执行此操作的代码可在 stackoverflow 中找到) * 将值“RunAs”设置为“Interactive User”

Ocka,如果我没有忘记某个步骤,您的办公自动化应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 2021-10-07
    • 2021-03-06
    • 2011-05-15
    • 2010-09-06
    • 2014-03-22
    • 2013-08-10
    • 2018-04-20
    相关资源
    最近更新 更多