64ビット版Windowsにおける一部ユーティリティは、32/64両方のバイナリを動作させなければならない場合があります。
この場合、32ビット版を主体とし、64ビット依存の部分だけ子プロセスを呼んだり、一歩進んでアーキテクチャ依存部と非依存部に分離させ、依存部を子プロセスにしたりするでしょうか。
個人の趣味レベルであれば、同一ソースコードから2つのバイナリを作り、両方とも動作させても構わないでしょう。ただ設定ぐらいは連動させ、可能であればマスター/スレーブとしてそれぞれ振る舞わせ、スレーブ側はUIを表示しないようにしたいところ。
というわけで、平たく言えばATOK2008タブ同時確定やBootcampアイコン再登録をDeltaEndに組み込むため、ファイルマッピングを利用して協調動作させるクラスとそのサンプルアプリを作ってみました。
SyncRun.zip
起動するとプロセスが2つ立ち上がります。マスター側のエディットボックスに入れた数字をスレーブ側に伝えることができ、マスター終了でスレーブも終了しますが、スレーブは単独で終了・再立ち上げ可能です。32ビット版、64ビット版の混在可能、どちらもマスター・スレーブ双方になれます。
この場合、32ビット版を主体とし、64ビット依存の部分だけ子プロセスを呼んだり、一歩進んでアーキテクチャ依存部と非依存部に分離させ、依存部を子プロセスにしたりするでしょうか。
個人の趣味レベルであれば、同一ソースコードから2つのバイナリを作り、両方とも動作させても構わないでしょう。ただ設定ぐらいは連動させ、可能であればマスター/スレーブとしてそれぞれ振る舞わせ、スレーブ側はUIを表示しないようにしたいところ。
というわけで、平たく言えばATOK2008タブ同時確定やBootcampアイコン再登録をDeltaEndに組み込むため、ファイルマッピングを利用して協調動作させるクラスとそのサンプルアプリを作ってみました。
SyncRun.zip
起動するとプロセスが2つ立ち上がります。マスター側のエディットボックスに入れた数字をスレーブ側に伝えることができ、マスター終了でスレーブも終了しますが、スレーブは単独で終了・再立ち上げ可能です。32ビット版、64ビット版の混在可能、どちらもマスター・スレーブ双方になれます。
このサンプルではアーキテクチャを判別していないので、32ビット版同士/64ビット版同士での動作もできますが、DeltaEndに組み込んだ際にはIsWow64Process APIの戻り値を参照したフラグを入れています。
シングル/マスター/スレーブのモード判別ができ、それに応じてUIを切り替えることができます(もちろんアプリの実装として)。
スレーブが消え失せた場合の処理は少し入れてありますが、マスターが消え失せた場合のスレーブ終了処理はまだ入っていません。タイマーを使って1分毎ぐらいでマスターにWM_NULLをPostMessageするといったあたりでしょうか。
シングル/マスター/スレーブのモード判別ができ、それに応じてUIを切り替えることができます(もちろんアプリの実装として)。
スレーブが消え失せた場合の処理は少し入れてありますが、マスターが消え失せた場合のスレーブ終了処理はまだ入っていません。タイマーを使って1分毎ぐらいでマスターにWM_NULLをPostMessageするといったあたりでしょうか。
コメントする