1

使用 WMI VB 脚本,我想创建/附加多个子进程到父进程,例如资源管理器进程。

当一个应用程序通过点击启动时,它成为资源管理器进程的子进程。对于 Windows 启动时加载的所有应用程序也是如此。

如果您使用任务管理器中的“结束进程树”上下文菜单选项终止资源管理器进程,它也会终止资源管理器进程的所有子进程(一种快速、强力的方法来清理内存而无需重新启动)。

我有两个脚本 - 一个杀死一堆特定进程,另一个重新启动这些进程。

我脚本中的大多数进程/应用程序都是在启动时加载的,因此它们是资源管理器进程的子进程。如前所述,当我杀死资源管理器进程树时,所有这些进程都会死掉。

当我使用脚本重新启动这些应用程序时,它们不再是资源管理器进程的子进程。当我杀死资源管理器进程树时,脚本启动的应用程序不会死。

现在,我知道我可以使用脚本单独杀死每个进程。但是,在脚本中杀死资源管理器进程树而不必指定我想要杀死的单个应用程序会很好。

因此,如果我有一个脚本可以将我的应用程序作为资源管理器进程的子进程启动,那么我的另一个脚本只需要终止资源管理器进程树。

我有一个脚本可以做到这一点。它循环并杀死资源管理器进程的所有子进程。但是,它仅适用于在启动时加载或被点击的应用程序。

此外,通过阻止这些应用程序在启动时加载,Windows 加载速度要快得多。稍后,我会在需要时单击我的脚本图标来加载我的应用程序。

这就是为什么我想创建一个脚本,可以将应用程序作为资源管理器进程的子进程启动。

一个有趣的旁注:我必须推迟杀死任何命令/控制台进程,否则脚本可能会在获取其余进程之前杀死自己。

任何想法如何做到这一点?

下面是我失败的代码。

Option Explicit
dim wmi, rootProcessName, rootProcess, objStartup, objConfig, objProcess, strComputer, dropbox, itunes, skype
strComputer = "."

dropbox="C:\Program Files\Dropbox\Dropbox.exe"
itunes="C:\Program Files\iTunes\iTunes.exe"
skype="C:\Program Files\Skype\Phone\Skype.exe"

Const NORMAL = 32
Set wmi = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objStartup =  wmi.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.PriorityClass = NORMAL

rootProcessName = "'explorer.exe'"
set rootProcess = wmi.ExecQuery("Select * from Win32_Process Where Name = " & rootProcessName )
For Each objProcess in rootProcess
    objProcess.Create dropbox, null, objConfig
    objProcess.Create itunes, null, objConfig
    objProcess.Create skype, null, objConfig
Next

WScript.Quit
4

1 回答 1

1
于 2013-09-05T22:50:37.567 回答