繁体   English   中英

当 IE 安全性不允许创建对象时,New ActiveXObject('Word.Application') 创建新的 winword.exe 进程

[英]New ActiveXObject('Word.Application') creates new winword.exe process when IE security does not allow object to be created

我们使用 MS Word 作为私人公司网站上几个字段的拼写检查器,当 IE 安全设​​置正确时,它运行良好。 (站点的区域设置为“受信任”,并修改受信任区域以允许控制在没有提示的情况下运行。)

我们使用的脚本创建了一个 word 对象,然后关闭它。 当对象存在时,会运行一个 winword.exe 进程,但在关闭 Word 对象时它会被销毁。

如果我们的站点未设置在受信任区域(具有默认安全级别的 Internet 区域)中,则创建 Word 对象的调用将按预期失败,但仍会创建 winword.exe 进程。 我无法在脚本中与此进程进行任何交互,因此该进程会一直存在,直到用户注销(用户无法手动销毁该进程,即使他们这样做也不是一个好的解决方案。 )

尝试创建对象的调用是...

try {
      wordApplication = new ActiveXObject('Word.Application');
} catch(error) {
      // irrelevant code removed, described in comments..
      // notify user spell check cannot be used
      // disable spell check option
}

因此,每次加载页面时,此代码可能会再次运行,从而创建另一个孤立的 winword.exe 进程。

wordApplication当然在 catch 块中是未定义的。

我希望能够预先检测浏览器的安全设置,但我已经对此进行了一些搜索,并且认为这是不可能的。

这里的管理层对此很满意。 只要 IE 安全性设置正确,它就可以正常工作,并且可以很好地满足我们的目的。 (我们最终可能会考虑拼写检查功能的其他选项,但它快速、便宜,并且可以完成我们需要它做的一切。)

最后一个问题困扰着我,我想对此做点什么,但我没有想法,而且我还有其他更需要我注意的事情。

在我把它放在一边之前,我想我会在这里征求建议。

我还没有找到这个问题的答案,我对这个问题暗示Internet Explorer的安全性感到不安(我忘了在我之前的帖子中提到我使用的版本:IE 7.)

但是,我确实实施了一个我不满意的解决方法,但是感觉比没有检查更舒服......

代码现在首先尝试打开另一个对象,如果失败,代码会假定Word也不会打开并发出错误。 从此时起,将不再调用新的ActiveXObject(),并且任何拼写检查尝试都将导致错误。

try { 
    oMSInfo = new ActiveXObject('Msinfo32.MSInfo.1');
} catch (error) {
    //  error handling code not shown...
    return;
}

当对新ActiveXObject()的调用失败时,此对象不会启动新进程。 它对系统资源也没有明显的影响。

如果您的浏览器创建了一个对象的实例,则该对象本身不会被浏览器安全策略阻止,除非它是一个安全漏洞。

尝试“application.visible=true”或“application.show()”以找出应用程序要求用户交互的位置。

提示:'typeof application=="undefined"' 表示变量'application' 未定义,其中'typeof application=="unknown"' 或多或少意味着它是一个已定义的变量,填充了外部专有的变量对象,如果您真的需要知道如何处理它,请阅读手册 - 在提到的应用程序的任何打开窗口中按 [F11] 在这种情况下可能会有所帮助。

可能是一个有用的资源: https : //docs.microsoft.com/en-us/office/vba/api/Word.Application

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM