Softgate Limited

株式会社ソフトゲート コーポレートブログ

MT4 のアップデートの仕組み パート1

今回と次回(思いの外長くなったので二回に分けます)のブログでは、MT4 のアップデートがどのような仕組みで実行されているのかを詳細に説明します。

いろいろと謎が多いように思える MT4 のアップデートですが、どんなときにどのようにしてアップデートされるのかというカラクリを理解してしまえば、アップデートを回避するのも許可するのも、あるいは特定の MT4 だけアップデートしないなんてことまで、自由自在に制御できるようになります。

っていうか、本来は自動アップデート任せで問題なく動くのが理想的なんですがね、MetaQuotes 様…。

アップデートファイルのダウンロード

MT4 はサーバに接続すると、まず新しいバージョンがあるかどうかをサーバに問い合わせます。

業者あるいはアカウントによってアップデートされる場合とされない場合があるのは、要するに、接続する MT4 サーバによって、保持している最新版の情報が異なるからです。

たとえば、2/22 現在 AxiTrader の口座にログインしても、未だに 600 へのアップデートは通知されません。

もしも新しいバージョンがあると通知されれば、更新ファイルをサーバからダウンロードするわけですが、注意したいのは、いったん更新ファイルがアップデートフォルダにダウンロードされた後は、原則として業者やアカウントに関係なく次回の MT4 実行時にアップデートが適用されるという点です。

アップデートが適用されるときの動作についてはこれから説明しますが、ここで一度まとめておくと

  • アップデートをダウンロードするかどうかはサーバから得た情報による
  • ダウンロード済みのアップデートを適用するかどうかは、アップデートフォルダの中身による

ということになります。

そのため、サーバからはアップデート通知を受けていないはずの AxiTrader の MT4 であっても、起動時にアップデートフォルダに更新ファイルが存在すると、アップデートが実行されそうになります。

ちなみに、アップデートフォルダの位置については、「MT4 ビルド 600 にアップデートしないために パート2」を参照してください。

アップデートを適用するかどうかの判断

MT4 の起動時にアップデートフォルダに更新ファイルがあれば、MT4 は原則としてアップデートを適用しようとします。

MT4 ビルド 600 にアップデートしないために」の記事で説明したのは、そもそもアップデートフォルダを作らせない、というアプローチだったわけですが、既にアップデートフォルダに更新ファイルが存在する状況においては、MT4 起動時のアップデート適用を避ける方法は

  • UAC の昇格確認が表示されたら「いいえ」を押す
  • コマンドラインオプションに /skipupdate を指定して terminal.exe を起動する

のいずれかしかありません。

これを利用して、もし特定の MT4 だけアップデートを適用しないようにしたい、と思ったら、その terminal.exe を起動するショートカットを作成して、そのコマンドラインオプションに /skipupdate を付けておくという技が便利です。

なお、ここまでの説明でお分かりいただけたと思いますが、MT4 は新バージョンを見つけたら即座に自動アップデートを適用するわけではなく、

  1. 起動時に新しいバージョンがあれば、まずはダウンロード(つまり適用はしない)
  2. 起動時に更新ファイルがあればアップデートを適用

という風に、新バージョンがリリースされてから、MT4 を二回起動しない限りは自動アップデートが行われないことも知っておいて損はないでしょう。

もちろん、他の MT4 を起動して更新ファイルがダウンロードされていたら、話は別ですけどね。


さて、MT4 の terminal.exe は、起動されると、アップデートフォルダ直下terminal.exe というファイルが存在するか確認し、もし存在すればそのバージョン番号を取得します。

そして、得られたバージョン番号が自分自身のバージョンよりも大きければ、アップデートが必要であると判断して、アップデート適用の処理を開始します。

では、ここで、ちょっとした実験をしてみましょう。

今、私の PC のアップデートフォルダには、ビルド 610 にアップデートしたときの更新ファイルが残ったままになっています。

そこで、アップデートフォルダにある terminal.exe をバイナリエディタで開いて、バージョンリソースを書き換え、偽のビルド 699 をこしらえました。

f:id:Softgate:20140223000438p:plain

また、アップデート処理自体は割とシンプルで、アップデートフォルダの下にあるファイルをインストールフォルダにコピーするので、試しに metaquotes.sux というファイルをアップデートフォルダに作って置いておきます。

f:id:Softgate:20140223000529p:plain

この状態で、D:\Programs\MT4\Beta にインストールされたビルド 610 を起動すると、おそらくアップデートが実行され、いま書き換えた terminal.exemetaquotes.sux ファイルがコピーされるはずです。

f:id:Softgate:20140223000548p:plain

ご覧の通り、確かに、terminal.exe も偽のビルド 699 にアップデートされていますし、私が勝手に作った metaquotes.sux というファイルも律儀にコピーされていることが分かります。

次回の記事では、アップデート処理がどのように実装されているかを詳しく説明し、ついでにアップデート処理に関連する技術情報をまとめようと思います。