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 は新バージョンを見つけたら即座に自動アップデートを適用するわけではなく、
- 起動時に新しいバージョンがあれば、まずはダウンロード(つまり適用はしない)
- 起動時に更新ファイルがあればアップデートを適用
という風に、新バージョンがリリースされてから、MT4 を二回起動しない限りは自動アップデートが行われないことも知っておいて損はないでしょう。
もちろん、他の MT4 を起動して更新ファイルがダウンロードされていたら、話は別ですけどね。
さて、MT4 の terminal.exe
は、起動されると、アップデートフォルダ直下に terminal.exe
というファイルが存在するか確認し、もし存在すればそのバージョン番号を取得します。
そして、得られたバージョン番号が自分自身のバージョンよりも大きければ、アップデートが必要であると判断して、アップデート適用の処理を開始します。
では、ここで、ちょっとした実験をしてみましょう。
今、私の PC のアップデートフォルダには、ビルド 610 にアップデートしたときの更新ファイルが残ったままになっています。
そこで、アップデートフォルダにある terminal.exe
をバイナリエディタで開いて、バージョンリソースを書き換え、偽のビルド 699 をこしらえました。
また、アップデート処理自体は割とシンプルで、アップデートフォルダの下にあるファイルをインストールフォルダにコピーするので、試しに metaquotes.sux
というファイルをアップデートフォルダに作って置いておきます。
この状態で、D:\Programs\MT4\Beta
にインストールされたビルド 610 を起動すると、おそらくアップデートが実行され、いま書き換えた terminal.exe
と metaquotes.sux
ファイルがコピーされるはずです。
ご覧の通り、確かに、terminal.exe
も偽のビルド 699 にアップデートされていますし、私が勝手に作った metaquotes.sux
というファイルも律儀にコピーされていることが分かります。
次回の記事では、アップデート処理がどのように実装されているかを詳しく説明し、ついでにアップデート処理に関連する技術情報をまとめようと思います。