WinDbgを再起動する
目的としてはVMwareの仮想シリアルポートでも書かれているように「WinDbgの再起動が面倒くさいよね、なんとかしたいね」というところ。
再起動させるスクリプトでも書いてしまえば良さそうなのだけれど、例のごとくDLLで実装して、メッセージフックでシステムワイドに配信するようにしてみた。フックによりDLLをロードしたプロセスはウィンドウメニューが拡張され、再起動コマンドが利用できるようになる、というもの。
……が、この欲張りさんな実装が失敗のもとらしい。アプローチとしては以下のスクリプトを生成し、第一引数にイメージパスや引数を与えて起動させる。
WScript.Sleep(100) WScript.CreateObject("WScript.Shell").Exec(WScript.Arguments.Item(0)) WScript.CreateObject("Scripting.FileSystemObject").DeleteFile(Wscript.ScriptFullName)
このスクリプトは第一引数のプロセスを起動した後、自身を削除する。vbsはすべてオンメモリで処理されるらしく、このようなアプローチが可能とのこと*1。が、どうも上手くいかない。引数にダブルコーテーションを含むときに問題があるらしい。あとファイルとしての書き出しも上手くできてない。要するにダメダメな感じ。
で、結局、素直に再起動させるバッチを書いてしまうことにした。
@taskkill /im windbg.exe @start "" "c:\Program Files\Debugging Tools for Windows\windbg.exe" -k com:pipe,port=\\.\pipe\com_1,resets=0,reconnect
simple is bestだね。
*1:ドライバと同じですねー。