首页 > 技术文章 > 搬家第59天-Citect2018citectVBA终止IO服务器进程

fishingsriver 2021-03-27 15:49 原文

今天在群里,有一个哥们问如何不通过运行管理器把IO服务器停掉。这个问题有点意思,当时有工作也没细想。下班在车上缕了一下思路。大概需要以下几个步骤:
1. 或许系统所有的进程。
2. 过滤这些进程,只保留citect32.exe。
3. 查询进程citect32.exe的线程commandline,找到符合条件的线程ID,也就是找到IO服务器的系统线程ID。
 
我前面写的那几个练习博客都是铺垫。针对这个具体的应用,还是在前面练习项目的基础上来尝试实现。写下面的citectVBA过程
Sub StopIOServer()
Dim strComputer
Dim objWMIServices As Object
Dim colSWbemObjectSet As Object
Dim SWbemObject As Object
strComputer="."
Set objWMIServices=GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colSWbemObjectSet=objWMIServices.InstancesOf("Win32_Process")
For Each SWbemObject In colSWbemObjectSet
 If SWbemObject.Description="citect32.exe" Then
  If Instr(SWbemObject.commandline,"IOServer1")<>0 Then'IOServer1是项目的IO服务器名字
    SWbemObject.Terminate (0)
  End If
 End If
Next
Set colSWbemObjectSet=Nothing
Set objWMIServices=Nothing
End Sub
 
在画面上新建一个按钮,按钮的鼠标点击事件调用上面的过程,保存编译运行,点击这个按钮,对照运行管理器,可以看到IO服务器被停掉了。

推荐阅读