通过COM自动化使用WScript.Shell / FileSystemObject时的句柄泄漏(Windows Server 2022)

编程语言 2026-07-11

我正在调查一个可能与Windows COM对象相关的句柄泄漏问题,来自第三方应用程序的使用。

该应用程序(Elipse E3 SCADA)运行的是 VBScript代码,用以实例化Windows COM对象,主要是:

  • WScript.Shell
  • Scripting.FileSystemObject

这些对象用于:

  • 执行外部命令(WScript.Shell.Run
  • 创建/写入临时文件(Scripting.FileSystemObject)

在某些环境中,承载脚本引擎的进程会持续累积句柄,最终达到数百万级别,导致操作系统不稳定。


观测到的行为

一个简化的模式示例:

Set sh = CreateObject("WScript.Shell")
sh.Run "cmd /c echo test", 0, False
Set sh = Nothing

这段代码定期执行。

在受影响的系统中,每次执行都会增加进程句柄数量(每次执行几个句柄),且数量不会回到此前的水平。

可以通过以下方式观察句柄的增长:

  • PowerShell Get-Process (HandleCount)
  • Sysinternals Process Explorer

环境对比

我们在多个环境中进行了测试:

  • Windows Server 2022(构建 20348.3932
  • Windows Server 2022(构建 20348.4773

结果:

  • 在某些 Windows Server 2022系统上,句柄数量会持续增长。在同一操作系统版本的其他 系统上,该问题则不会发生

这表明该行为可能与以下差异有关:

  • Windows Script Host组件
  • COM运行时
  • 系统库或更新

问题

是否有人知道Windows Server 2022中的某些更新或组件可能影响此行为?

关于可能的原因、诊断方法或推荐的替代方案的任何建议都将不胜感激。

谢谢。

解决方案

经过一番调查,我发现句柄增长并非由应用本身引起,而是由其与安全代理的交互所致。

该代理(cynetMS)似乎会劫持进程,可能导致句柄随着时间增加。

为验证这一点:

  • 移除了代理 → 问题消失
  • 重新安装后 → 问题又出现

下一步,我们将尝试在代理中为该应用添加白名单,以防止此行为。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章