Update::Installer
取得した実行ファイルを次の起動で使えるようにする(issue #10 第 2 段階)。
実行中の exe は上書きできないが、リネームはできる。この性質だけを使う。 走っている実行ファイルを .old へ退避し、取っておいた .new を元の場所へ移す。 exe のパスが変わらないため、SteamVR へ登録したマニフェストの binary_path_windows は書き換えなくてよい。
取得と置き換えを分けてあるのは、置き換えが失敗すると起動しない exe が残る操作だからである。 常駐している間は取得と検証までを行い、置き換えは起動シーケンスの先頭で行う。
Constants
読み出しの単位。
Constructors
Instance methods
実行ファイルを置き換える。
退避に成功した後で移動に失敗したら、退避したものを戻す。 戻せなければ正規のパスに実行ファイルが無い状態が残るため、 通常の失敗とは別の例外にして呼び出し側へ伝える。 そちらでは取得しておいたものを捨ててはならない。復旧の材料になる。
取得しておいたものを消す。
片方ずつ消す。まとめて 1 つの rescue で括ると、先の 1 つが消せなかったときに もう片方を試さないまま抜ける。両方が残ると staged の照合をまた通り、 取り直しを案内した直後から同じものが適用できてしまう。
片方だけ残った取得を片付ける。
取得の最中に終了すると、書きかけの実行ファイルだけが残る。 記録は取得が終わってから書くためである。 そのままでは最大で MAX_ASSET_SIZE 分の書きかけが次の取得まで居座る。
呼ぶのは起動時だけとする。取得の最中に呼ぶと、 書いている途中のものを消すことになる。
退避しておいた古い実行ファイルを消す。
置き換えた直後は、その exe がまだ走っているため消せない。 次の起動で消す。消せなくても常駐は続ける。次の機会にまた試す。
リリースのアセットを取り、記録と一緒に残す。
アセットを持たないリリースでは何もせず偽を返す。 手で作った安定版に exe を添え忘れた場合がこれにあたり、 そのときは利用者にリリースページから取ってもらう。
取得済みで、今のチャンネルに合い、記録と照合の通る実行ファイル。無ければ nil を返す。
合わないものはその場で捨てる。残しておいても次の起動でまた同じ照合に落ちるだけであり、 取り直しの機会を与えたほうがよい。