WMI VB スクリプトを使用して、エクスプローラー プロセスなどの親プロセスに複数の子プロセスを作成/接続したいと考えています。
アプリをクリックして起動すると、エクスプローラー プロセスの子プロセスになります。Windows の起動時に読み込まれるすべてのアプリについても同様です。
タスク マネージャーの [プロセス ツリーの終了] コンテキスト メニュー オプションを使用してエクスプローラー プロセスを強制終了すると、エクスプローラー プロセスのすべての子プロセスも強制終了されます (再起動せずにメモリをクリーンアップするための迅速で強引な方法)。
2 つのスクリプトがあります。1 つは一連の特定のプロセスを強制終了し、もう 1 つはそれらのプロセスを再起動します。
スクリプト内のプロセス/アプリのほとんどは起動時に読み込まれるため、エクスプローラー プロセスの子プロセスです。エクスプローラー プロセス ツリーを強制終了すると、前述のように、これらすべてのプロセスが停止します。
スクリプトを使用してこれらのアプリを再起動すると、それらはエクスプローラ プロセスの子ではなくなります。エクスプローラー プロセス ツリーを強制終了しても、スクリプトによって開始されたアプリは終了しません。
これで、スクリプトを使用して各プロセスを個別に強制終了できることがわかりました。しかし、強制終了したい個々のアプリを指定せずに、スクリプトでエクスプローラー プロセス ツリーを強制終了するだけでよいでしょう。
したがって、アプリをエクスプローラー プロセスの子として起動できるスクリプトが 1 つある場合、もう 1 つのスクリプトはエクスプローラー プロセス ツリーを強制終了するだけで済みます。
まさにそれを行うスクリプトがあります。ループして、エクスプローラー プロセスのすべての子プロセスを強制終了します。ただし、起動時に読み込まれるか、クリックされるアプリでのみ機能します。
また、これらのアプリが起動時に読み込まれないようにすることで、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