我可以使用WMI VB脚本创建子进程吗?
使用WMI VB脚本,我想创建/附加多个子进程到父进程,如资源管理器进程。我可以使用WMI VB脚本创建子进程吗?
当一个应用程序可以通过点击它开始,它成为Explorer进程的子进程。 Windows启动时加载的所有应用程序也是如此。
如果您在任务管理器中使用“结束进程树”上下文菜单选项终止资源管理器进程,它也会终止资源管理器进程的所有子进程(一种快速,蛮力的方式来清理内存而无需重新启动) 。
我有两个脚本 - 一个杀死了一堆的具体流程,另一个重新启动这些进程。
大部分进程的/在我的脚本应用程序在启动时因此它们explorer进程的孩子被加载。如前所述,当我终止浏览器进程树时,所有这些进程都会死亡。
当我使用脚本重新启动这些应用程序时,它们不再是资源管理器进程的子项。当我杀死浏览器进程树时,脚本启动的应用程序不会死亡。
现在,我知道我可以使用脚本分别杀死每个进程。但是,只需要在脚本中终止浏览器进程树,而不必指定要杀死的单个应用程序即可。
所以,如果我有一个脚本,该脚本可以开始我的应用程序作为资源管理过程中的孩子,我的其他脚本只是要杀死Explorer进程树。
我有一个脚本可以做到这一点。它循环并杀死探测器进程的所有子进程。但它只适用于启动时加载或点击的应用程序。
此外,通过阻止这些应用程序在启动时加载,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
窗口的进程跟踪谁创建它的进程ID,这就是关系如何被管理。为了得到你想要的,你必须改变存储在子进程中的父PID,或者将代码注入到你想成为父进程的进程中,并让它创建新的子进程。这些都不是真的可行的。
真正的解决方案是使用Job Objects,这样你可以终止其与工作都在同一时间相关联的所有进程。但是你必须迁移出VBScript。
它是如何失败?有错误讯息? – ssorrrell 2009-07-30 14:29:50