2018/11/24 Cmd Process Terminator Ver. up to 2.00
2018/11/17 64bitOSで 16bitプロセスは動くか?
2018/11/10 Before Power Off の x64 でのデフラグについて
2018/11/03 Processx64 の謎
今日付けで Cmd Process Terminator をバージョンアップしました。バージョンアップ内容は以下の通りです。
Ver.2.00 2018/11/24
3番目と4番目の更新は機能アップになります。作者が使ってみると使い勝手が悪かったので、機能アップしてしまいました。
5番目の更新理由は、いつもと同様です。
開発の際、ここをみて Screen Saver Stopper や Before Power Off の Processx64.exe のような小細工はできないとして、32bit版 *.exe(CPT32.exe)、64bit版 *.exe(CPT64.exe)という2つの *.exe を用意することにしました。
色々なソフトを Visual Studio 2017 対応をするにあたり、表題に関して調べる必要があったので調べました。結果は以下の通りでした。
OS | 16 Bit プロセスの動作 |
---|---|
Windows XP 32bit | 動作する |
Windows Vista 32bit | |
Windows 7 32bit | |
Windows 8 32bit | インストールを促される |
Windows 8.1 32bit | |
Windows 10 32bit | |
Windows XP 64bit | 動作しない |
Windows Vista 64bit | |
Windows 7 64bit | |
Windows 8 64bit | |
Windows 8.1 64bit | |
Windows 10 64bit |
インストールを促される場合は以下のような画面が出ます。
動作しない場合は以下のような画面が出ます。
上記の画面の中で「NTVDM」というのは、WOW64(Windows 32-bit On Windows 64-bit)の 16bit−32bit 版にあたるものです。32bitOS中で16bitのプロセスをエミュレーションするというのは、Microsoft の得意技です。この技術を用いて、作者も使っている Hyper-V が出来上がっています。
詳しい説明は機会がありましたら...
前回は Processx64.exe について説明しましたが、そのおかげで Before Power Off の x64 でのデフラグについて説明できるようになりました。当件の実現に際しては、実に4つのプロセスが起動されます。それを以下に示します。
ウインドウのタイトル | 説明 | *.exe 名と環境 |
---|---|---|
Before Power Off | スケジュールの入力画面 | BPO.exe 32bit 非昇格 |
Windows 終了までの実行(昇格中) | DOSコマンド実行プロセスの監視画面 | BPO.exe 32bit 昇格 |
なし | Processx64.exe で前回の説明参照 | Processx64.exe 64bit 昇格 |
コマンドプロンプト(黒い画面) | Windows の持っている defrag.exe のプロセス | defrag.exe 64bit 昇格 |
上記の表の上のプロセスが下のプロセスの終了を監視しています。どうしてこのように複雑になったかというと、Windows Vista から昇格という概念ができて BPO.exe を2つのプロセスに分けなければなりませんでした。また、Windows XP から x64 という概念ができ、補助プロセスの Processx64 を作りました。Windows の複雑化についていくためにどうしても複雑にならざるを得ませんでした。これから Windows はどうなっていくのでしょうか?作者はそれについていけるのでしょうか?
Before Power Off と Screen Saver Stopper のアーカイブの中に、何故か共通の"Processx64.exe"が入っています。これがなんだかわからなくてダブルクリックをした人も多いかもしれません。ところが「直接起動してはいけません」というメッセージが出てしまいます。
そもそも、32bit 用に作られた *.exe を 64bitのOS上で動かした場合、デフラグが全くできないことがわかりました。少し実験してみましょう。この実験は 64bit OSを使っている人限定です。32bit 用のコマンドプロンプトを作ります。作り方は以下の通りです。
上記を起動し「defrag」コマンドを入力してみましょう。結果は以下のようになります。
「defrag」コマンドを認識してくれません。
そもそも 32bit 用に作られた *.exe を 64bitのOS上で動かす場合、WOW64(Windows 32-bit On Windows 64-bit)の世界で動かすことになりますが、その世界では「defrag」コマンドが見えないようです。
最初はこんな問題があるとは思いませんでした。さてどうするか???。
各ソフトの 64bit 版を作ることも考えました。ただその場合 64bit 版は 32bitOS上では動きません。そういう手段ももちろん考えられますが、デフラグの起動のところだけの問題なので、64bit 版の *.exe を作り、そこから起動させることにしました。それが"Processx64.exe"です。"Processx64.exe"からは「defrag」コマンドが見えます。"Processx64.exe"は Screen Saver Stopper についているバージョンの場合、以下のような仕様になっています。実は以下の引数をつけて起動すると以下の動作をします。
引数 | 動作 |
---|---|
なし | 「直接起動してはいけません」というメッセージを出す。 |
:(半角のコロン)DOSコマンド | DOSコマンドを起動し終了を待つ。 |
/(半角のスラッシュ)DOSコマンド | DOSコマンドを起動し自らはすぐに終了する。 |
その他 | 引数そのままのメッセージを出す。 |
色々と遊んでみてください。
"Processx64.exe"はプログラムのデバッグにもすごく役立っています。