我可以使用WMI VB脚本创建子进程吗?

我可以使用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 
+1

它是如何失败?有错误讯息? – ssorrrell 2009-07-30 14:29:50

窗口的进程跟踪谁创建它的进程ID,这就是关系如何被管理。为了得到你想要的,你必须改变存储在子进程中的父PID,或者将代码注入到你想成为父进程的进程中,并让它创建新的子进程。这些都不是真的可行的。

真正的解决方案是使用Job Objects,这样你可以终止其与工作都在同一时间相关联的所有进程。但是你必须迁移出VBScript。