2016年6月10日金曜日

タスクマネージャでwshの実行ファイルの名前を分かりやすくする

WSFファイルを普通に起動すると、タスクマネージャのプロセスタブに表示されるイメージ名は「wscript.exe」になります。
使用するファイルが一つ二つ程度なら問題ありませんが、さまざまな用途のファイルを使用してバックグラウンドでループ実行するようなものを使い始めるとタスクマネージャの表示がこんな感じになってきます。




イメージ名に「wscript.exe」がずらり。。



これではどれが何の処理を行っているのか分かりません。


編集中のプログラムがバグで無限ループしてしまったとか、そういう時に「プロセスの終了」でループを中断させたい場合などがありますが、そういう場合はCPU使用率が高いものを選んでみるとか、そんな感じでロシアンルーレットみたいな状態になってしまいます。


そのような事態を回避するために、バックグラウンドで常時起動しておくようなスクリプトファイルでは「wscript.exe」をコピーして別名保存して「任意の名前_wscript.exe」などにすると良いです。

今回は「wscript.exe」を一時フォルダに別名コピーして、処理終了後にそれを削除するところまで自動で行うサンプルを作成しました。


<package>
<job>
<script>
fs = new ActiveXObject('Scripting.FileSystemObject')
shell = new ActiveXObject('WScript.Shell')
exeファイル名 = fs.GetFileName(WScript.FullName).toLowerCase()
switch(exeファイル名){
case 'wscript.exe':
case 'cscript.exe':
path = fs.GetSpecialFolder(2)+'/分かりやすい名前.exe'
fs.CopyFile(WScript.FullName, path)
WScript.Echo(path + ' "'+WScript.ScriptFullName+'"')
shell.run(path + ' "'+WScript.ScriptFullName+'"')
WScript.Quit()
}
WScript.Echo(exeファイル名)
shell.run('wscript "'+WScript.ScriptFullName+'" //job:後始末 '+WScript.FullName)
</script>
</job>
<job id="後始末">
<script>
arg = WScript.Arguments
if(arg.length!=1){ WScript.Quit() }
fs = new ActiveXObject('Scripting.FileSystemObject')
fs.DeleteFile(arg(0))
WScript.Echo(arg(0))
</script>
</job>
</package>

実行した結果、以下のように分かりやすい表示になりました。

0 件のコメント:

コメントを投稿