「システム異常の詳細」からMT4を自動復帰させる

Build 226 の MT4 を使っていると、下記ダイアログが出てくることが稀にあります。

これは、古いバージョンで作られた ex4 ファイルを新しいバージョンの MT4 で使用した場合に発生することが多いようです。その場合は、3箇所の mqlcache.dat をすべて削除して MT4 を再起動する..(=mq4ファイルがすべてリコンパイルされる..)という解決策でOK なのですが、必ずしもこれが原因で発生するだけではありません。私も過去に1度遭遇したのですが、結局原因は不明でした。



このクラッシュを意図的に引き起こすのは簡単で、コメント欄で kartzさんが紹介されたような、DLLの不正呼び出しで再現できます。下の例では、引数が無い関数GetCurrentProcess()に int の引数をつけています。

#property show_inputs
#import "kernel32.dll"
   int  GetCurrentProcess(int);
#import
int start()
{
   if(!IsDllsAllowed()){
      Alert("Check Allow DLL imports");
      return(0);
   }
   Sleep(5000);
   GetCurrentProcess(1);
   return(0);
}

↑これを script として保存して実行すると、5秒後にクラッシュします。^^;
(EAの不正利用を検知しました。このMT4は自動的に停止します..。なんて目的で使わないように...orz




どうせなら、クラッシュ状態を検出して、MT4を再起動させたいよねっ?? と思って用意したのが、AutoHotKey による、MT4CrashReboot.exe です。リブートは不要で音だけ鳴らしたい人向けに MT4CrashAlert.ahk もあります。

このツールはあまり役に立たない方がシアワセのですが、、どうしても必要な人はこちらからどうぞ..。
※ここで公開していたバージョンではVPSで動作しないことが判明したので、
http://d.hatena.ne.jp/fai_fx/20100912 に追加記事を書きました。




※再起動ツールに頼らずに、クラッシュしないような環境を構築することが大切です。古いMT4を試して、どうしてもダメな時に使うべきです..。