访问时拒绝Office Interop访问

时间:2014-02-03 16:51:53

标签: c# interop dcom

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

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

  

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

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

为什么会抛出这个异常?

1 个答案:

答案 0 :(得分:0)

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

Ocka,如果我没有忘记一些步骤,你的办公自动化应该正常工作..