C#处理word错误:“Unable to cast COM object of type 'Microsoft...'”(100%结贴)

CopperBell 2009-08-07 12:40:30
摘要:通过引用Microsoft.Office.Interop.Word处理word文档,读取里面table的内容并将word转换为HTML
服务器环境描述
实验用服务器(简称A):Windows XP SP2;Office 2003 繁体中文版;VS2008
部署服务器(简称B):Windows Server 2003; Office 2003 繁体中文版;VS2008
问题描述在A上部署后,一切功能正常
然后在B上部署,出现如下错误:
Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error: Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Exception: Unable to cast COM object of type 'Microsoft.Office.Interop.Word.ApplicationClass' to interface type 'Microsoft.Office.Interop.Word._Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020970-0000-0000-C000-000000000046}' failed due to the following error: Error loading type library/DLL. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

补充:1.服务器上IIS设置OK,但Application Pool我不确定,关于Identity中“Application Pool identity”我选择的是Configuration, user name和password是采用的一个administrator帐号。
2.在B上通过事件查看器发现有提示:Is authenticated? False
3.我有重装系统,重装office(A就是为了做实验才弄的)
4.server是部门server,只有部门成员才可以访问,其中leader具有administrator权限,在DCOM中和Application Pool中都是采用的一个leader的帐号密码。
5.主要源码如下:

//Upload1是一个支持多文件上传的控件
if(Upload1.UploadedFile.Count>0)
{
foreach(UploadedFile validFile in Uploaded1.UploadedFiles)
{
//无论是采用_Application或是ApplicationClass均是这个错误,不用讨论接口与类的问题。
Microsoft.Office.Interop.Word.ApplicationClass cls=new Microsoft.Office.Interop.ApplicationClass();
}
}

这个问题已经困扰我3天,恳请帮助。
...全文
3242 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zybben1986 2011-04-18
  • 打赏
  • 举报
回复
是什么原因呢。同顶
jjlion2008 2010-05-08
  • 打赏
  • 举报
回复
学习了,很受益
piaoxue1987 2010-02-05
  • 打赏
  • 举报
回复
dddddddddddddddddddddddddd
还想懒够 2009-08-07
  • 打赏
  • 举报
回复
身份验证方式是Windows身份验证还是Form认证?
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jjkk168 的回复:]
基本上还是可以判断为应用程序池的权限问题,楼主可以先检查一下应用程序池的账户是否有访问服务器文件或注册表的权限
[/Quote]
有的,既然是设定的一个administrator的权限,就不存在不能访问server上folder的问题。
还想懒够 2009-08-07
  • 打赏
  • 举报
回复
基本上还是可以判断为应用程序池的权限问题,楼主可以先检查一下应用程序池的账户是否有访问服务器文件或注册表的权限
wenblue7 2009-08-07
  • 打赏
  • 举报
回复
帮顶了
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 jjkk168 的回复:]
不知道楼主是不是说其他用户可以通过共享目录的方式来访问共享文件夹,而现在就是需要去掉这个功能?

如果是这样,那么在管理里面有一个共享文件夹管理,把那些共享全删了就行了
[/Quote]
删了就不能访问website啦,会弹出对话框叫输入用户名和密码。
还想懒够 2009-08-07
  • 打赏
  • 举报
回复
不知道楼主是不是说其他用户可以通过共享目录的方式来访问共享文件夹,而现在就是需要去掉这个功能?

如果是这样,那么在管理里面有一个共享文件夹管理,把那些共享全删了就行了
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ihandler 的回复:]
引用 16 楼 momonn 的回复:
引用 9 楼 jjkk168 的回复:
就是这里出问题了

由于采用了impersonate身份,那么运行到服务端的身份就是当前登录者的身份,而不是管理员
而当前用户身份没有服务器相应权限,因此出现错误

你可以先把这个改成false试试(不知道是否会影响到其他,需要先确认一下)

最后请教一个问题:部门成员可以访问server上的folder,而目前还可以通过IP访问website,当然,此website就是架在部门server上的。出现这样的现象:部门成员可以直接访问website的folder,请问要禁止访问folder而可以访问website应该怎么设权限?



虚拟目录 属性  不要勾选 【目录浏览】
[/Quote]
这个不行额,因为该server上的资料是可以被部门成员访问的
IHandler 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 momonn 的回复:]
引用 9 楼 jjkk168 的回复:
就是这里出问题了

由于采用了impersonate身份,那么运行到服务端的身份就是当前登录者的身份,而不是管理员
而当前用户身份没有服务器相应权限,因此出现错误

你可以先把这个改成false试试(不知道是否会影响到其他,需要先确认一下)

最后请教一个问题:部门成员可以访问server上的folder,而目前还可以通过IP访问website,当然,此website就是架在部门server上的。出现这样的现象:部门成员可以直接访问website的folder,请问要禁止访问folder而可以访问website应该怎么设权限?

[/Quote]

虚拟目录 属性 不要勾选 【目录浏览】
zzphuli 2009-08-07
  • 打赏
  • 举报
回复
UP
还想懒够 2009-08-07
  • 打赏
  • 举报
回复
印象当中最简单的方式就是把匿名账户给关了就行了。不太确定是不是这样,如果这样不行,你在server上运行gpedit.msc看看里面有没有相关的设置
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jjkk168 的回复:]
就是这里出问题了

由于采用了impersonate身份,那么运行到服务端的身份就是当前登录者的身份,而不是管理员
而当前用户身份没有服务器相应权限,因此出现错误

你可以先把这个改成false试试(不知道是否会影响到其他,需要先确认一下)
[/Quote]
最后请教一个问题:部门成员可以访问server上的folder,而目前还可以通过IP访问website,当然,此website就是架在部门server上的。出现这样的现象:部门成员可以直接访问website的folder,请问要禁止访问folder而可以访问website应该怎么设权限?
xiedu414 2009-08-07
  • 打赏
  • 举报
回复
学习了
还想懒够 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 momonn 的回复:]
引用 11 楼 psy0324 的回复:
我想问题主要处在,你的web程序无法调用操作系统的Office组件,必须对Office组件进行配置。
控制面板--->管理工具--->组件服务,然后选择 我的电脑--->DCOM配置,定位到Microsoft Word 文档。
查看其属性,选择安全选项卡。。。。启动激活权限、访问权限、配置权限,都加上ASP.NET账户和来宾账户即可。。。。

不是说了我部署到XP上是OK的嘛。。。
[/Quote]

因为你在XP上使用的是匿名身份,但带上impersonate以后,匿名就变成了当前身份的人,你当前登录系统的肯定是XP的管理员吧,因此管理员身份也能够访问OFFICE的组件,但在2003上就不一样了
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 psy0324 的回复:]
我想问题主要处在,你的web程序无法调用操作系统的Office组件,必须对Office组件进行配置。
控制面板--->管理工具--->组件服务,然后选择 我的电脑--->DCOM配置,定位到Microsoft Word 文档。
查看其属性,选择安全选项卡。。。。启动激活权限、访问权限、配置权限,都加上ASP.NET账户和来宾账户即可。。。。
[/Quote]
不是说了我部署到XP上是OK的嘛。。。
CopperBell 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jjkk168 的回复:]
就是这里出问题了

由于采用了impersonate身份,那么运行到服务端的身份就是当前登录者的身份,而不是管理员
而当前用户身份没有服务器相应权限,因此出现错误

你可以先把这个改成false试试(不知道是否会影响到其他,需要先确认一下)
[/Quote]
我真想大吼一声:我操!
谢谢你!!!搞定
周末终于可以休息了。。。
今晚可以DOTA咯。。。
psy0324 2009-08-07
  • 打赏
  • 举报
回复
我想问题主要处在,你的web程序无法调用操作系统的Office组件,必须对Office组件进行配置。
控制面板--->管理工具--->组件服务,然后选择 我的电脑--->DCOM配置,定位到Microsoft Word 文档。
查看其属性,选择安全选项卡。。。。启动激活权限、访问权限、配置权限,都加上ASP.NET账户和来宾账户即可。。。。
昕颖 2009-08-07
  • 打赏
  • 举报
回复
我想这个的话最主要的还是配置出问题了。
加载更多回复(5)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧