C# 访问被拒绝时,办公室互操作访问被拒绝

C# 访问被拒绝时,办公室互操作访问被拒绝,c#,interop,dcom,C#,Interop,Dcom,我尝试使用在单独的Windows服务下运行的Office.Interop转换Office文档。 此服务正在特定帐户(将来的用户名)下运行 已为此帐户设置所有文件夹访问权限。当我尝试创建任何Office应用程序(例如,var app=new Excel.application())时,我的代码失败,出现异常: 由于以下错误,检索CLSID为{XXXX}的组件的COM类工厂失败:E_ACCESSDENIED 好的,但是我已经为此CLSID配置了DCOM权限!我打开dcomcnfg.exe,选择具有此

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

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

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

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


为什么会抛出此异常

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


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

我不认为你可以(编辑:应该)在一个服务中使用办公用品。商业Aspose公司还有一些。@UweKeim确定您可以在窗口服务中使用Office互操作。@UweKeim是的,您可以!我们销售的软件包括这些。但微软并不支持它。我们很久以前就有过类似的问题。我完全忘记了,但最后我们需要以服务“运行身份”的用户身份登录到office运行计算机。该服务使用哪个帐户?本地系统?