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安全性机制,对症下药。
网友评论