数人が利用する環境で常に最新版を利用してもらう方法
init.exe = main.exe(システム本体)のコピー & main.exe起動用
main.exe = システム本体。起動後、init.exeに対してWM_CLOSEを送りクローズ
利用者にはinit.exeで起動してもらう。
init.exeはネットワークドライブからmain.exeをロ−カルHDDにコピーする。
例:
-- init.exe 解説 --
下記をOnInitDialog()辺りに記載。
init.exeのタイトルをinitにしておく。
SetWindowText("init");
もっとユニークなタイトルにしておくと良い。
続いてmain.exeのコピー。
CopyFile("\\\\hdsi\\honbu\\users\\main.exe","c:\\db\\main.exe",true);
hdsiはネットワークドライブ名。名前解決しない場合はIPアドレスに置き換える。
LOCALにコピーしたので続いて、main.exeの起動。
ShellExecute(m_hWnd,NULL,"C:\\db\\main.exe",NULL,NULL,SW_SHOWNORMAL);
開発者はmain.exeを修正したら\\hdsi\\honbu\\usersにmain.exeを入れる。
-- main.exe 解説 --
これもOnInitialUpdate()辺りに、下記を記載。
// initが存在しないと言うことは直接main.exeが起動されたと
// 言うことで強制終了させる。
CWnd *p=CWnd::FindWindow(NULL,"init");
if ( p==NULL ) this->SendMessage(WM_CLOSE,NULL );
init.exeはもう必要ないので initという名前でFindWindowし、WM_CLOSEを送ってクローズして終わり。
if ( p ) p->SendMessage(WM_CLOSE,NULL);
-- 解説 --
ネットワークドライブにあるEXEファイルを更新しようとしても誰かが実行中だと上書きできない。
この方法で一度、LOCAL-HDDにコピーしてそこから実行する形にすれば更新可能となる。ホルダ名は例です。