杉山利幸の公開日誌 2018年11月分

2018年12月分

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 の謎


2018/11/24 Cmd Process Terminator Ver. up to 2.00

今日付けで Cmd Process Terminator をバージョンアップしました。バージョンアップ内容は以下の通りです。

Ver.2.00 2018/11/24

1番目と2番目の更新理由は、いつもと同様です。

3番目と4番目の更新は機能アップになります。作者が使ってみると使い勝手が悪かったので、機能アップしてしまいました。

5番目の更新理由は、いつもと同様です。

開発の際、ここをみて Screen Saver StopperBefore Power OffProcessx64.exe のような小細工はできないとして、32bit版 *.exe(CPT32.exe)、64bit版 *.exe(CPT64.exe)という2つの *.exe を用意することにしました。


2018/11/17 64bitOSで 16bitプロセスは動くか?

色々なソフトを Visual Studio 2017 対応をするにあたり、表題に関して調べる必要があったので調べました。結果は以下の通りでした。
OS16 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 が出来上がっています。

詳しい説明は機会がありましたら...


2018/11/10 Before Power Off の x64 でのデフラグについて

前回は 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 はどうなっていくのでしょうか?作者はそれについていけるのでしょうか?


2018/11/03 Processx64 の謎

Before Power OffScreen 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"はプログラムのデバッグにもすごく役立っています。


2018年10月分

戻る