美文网首页
IIS 调用office组件的com_error

IIS 调用office组件的com_error

作者: alue | 来源:发表于2022-05-31 15:16 被阅读0次

Component Object Model (COM)

微软定义的一种交互式对象标准。与语言无关,只规范了交互行为。

COM能够让你使用自己喜爱的语言来操作 windows下的应用对象,即便该COM对象并不是这个语言编写的。

例如,在python里调用word应用对象,实现word转pdf的代码如下:

from win32com.client import DispatchEx
import pythoncom

# 完成 docx -> pdf
pythoncom.CoInitialize()
word = DispatchEx("Word.Application")  
doc = word.Documents.Open('1.docx')  
doc.SaveAs('1.pdf', FileFormat=17)  
doc.Close()  
word.Quit()
pythoncom.CoUninitialize()

在开发的时候,上面代码运行正常。但是部署到IIS之后,会出现各种错误
例如:

pywintypes.com_error: (-2147221005, '无效的类字符串', None, None)

或者

(-2147024891, '拒绝访问。', None, None)

原因就是COM对安全性有着自己的标准,如果权限不足,就会产生异常。

解决办法

网上给出的解决之道也是多种多样,大体思路是在 dcomcnfg.exe 中,找到对应的COM应用程序,为IIS用户赋予权限。
不过COM的安全机制还有IIS的账户机制非常复杂,一时半会难以理清头绪,这里给出一个釜底抽薪的做法。
直接将COM身份验证级别设置为‘无’,就能关闭安全验证,实现业务功能。

关闭COM安全验证

注意

将计算机范围的身份验证级别设置为“无”极其不安全。

只有在可信的内部局域网环境,才可以偷懒采用这种方式。其它环境,建议仔细阅读COM安全性机制,对症下药。

相关文章

网友评论

      本文标题:IIS 调用office组件的com_error

      本文链接:https://www.haomeiwen.com/subject/idpzprtx.html