【问题标题】:How to use Microsoft.Office.Interop.Word when Windows Authentication is Enabled?启用 Windows 身份验证时如何使用 Microsoft.Office.Interop.Word?
【发布时间】:2018-02-20 21:45:30
【问题描述】:

我正在使用 Microsoft.Office.Interop.Word 在 ASP.NET Web 应用程序中从 C# 打开 word 文档并以编程方式替换一些书签。我使用 Windows 身份验证进行自动登录。从视觉工作室运行时它工作得很好。但是,在发布它之后,当应用程序尝试打开 word 文档时,我收到拒绝访问错误。这是我得到的错误。

检索 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败,原因是以下错误:80070005 访问被拒绝。 (HRESULT 异常:0x80070005 (E_ACCESSDENIED))

我尝试了所有通过 Internet 发布的解决方案,例如(更改 DCOMCNFG 中 word 的权限、授予文件夹的读/写完全控制权等。由于我使用 Windows 身份验证,还有其他解决方案吗?或者我要去哪里错了?请帮忙。

提前致谢

【问题讨论】:

  • 不要在 ASP.NET 中使用 Office 互操作库。您将遇到各种难以诊断的奇怪错误,速度会很慢,而且您的 Office 副本可能未获得在服务器上运行的许可。微软says don't do it。相反,请使用原生 .NET 库,例如 Open XML SDKDocX
  • 如果我们使用 DocX,我们可以在文档页脚中查找和替换单词吗?有什么想法吗?

标签: c# asp.net .net c#-4.0 iis-7.5


【解决方案1】:

可能的解决方法是将项目的平台从“任何 CPU”修改为“X86”(在项目的属性、构建/平台的目标中)

这个问题的根本原因主要是因为 VSS Interop 是一个使用 32 位框架的托管程序集,并且 dll 包含一个 32 位 COM 对象。如果你在 64 位环境下运行这个 COM dll,你会得到错误信息。

来源:-https://forums.asp.net/t/1119052.aspx?Retrieving+COM+class+factory+failed+due+to+the+following+error+80040154

【讨论】:

  • 您的操作系统是 32 位还是 64 位?
  • 我的操作系统是 64 位的。
【解决方案2】:

最后,我能够解决我的问题。它基本上是一个权限问题。
由于我的操作系统是 64 位,microsoft.office.interop.word 需要 32 位的所有权限。它不适用于 64 位。 帮助我的程序是:

  1. 解决方法

转到开始 -> 运行。 键入 DCOMCNFG。 (这将加载“组件服务”) 转到组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置 -> Word-> 安全选项卡-> 授予访问权限

如果在 DCOM 配置中未找到 MSWord,则
在运行窗口中:输入 MMC -32

文件 -> 添加/删除管理单元

-> 添加组件服务

->计算机

->我的电脑

->DCOM 配置

->Microsoft Word 应用程序

授予访问本地服务、管理员、IUSRS、IIS 工作进程、IIS AppPool/DefaultAppPool

  1. 解决方法

打开注册表编辑器(regedit) 搜索winword.exe,从“HKEY_CLASSES_ROOT\AppID\WINWORD.EXE”中复制单词的AppId/Guid

打开组件服务(dcomcnfg),进入计算机->MyComputer->DCOM Cnfg

选择具有从注册表复制的 guid 的应用程序。 右键单击它,选择属性,选择身份选项卡,选择“交互式用户”,单击“应用”按钮。

这是帮助我的链接: Here is the link which helped me.

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2017-11-30
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多