Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/update.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ GUI 常駐中に GitHub Releases を自動で確認し (起動 30 秒後と 1

新しい版の zip は常駐中に取得し、GitHub が公開する SHA-256 と照合してから `%AppData%\VRCToolsDataSync\update\` に置く。置き換えは次の起動時、または「再起動して適用」ボタンで行われる。実行中の一式は自分では置き換えられないため、取得した zip の中の CLI が更新ヘルパとして App の終了を待ってから `app\` と `cli\` を入れ替え、失敗した場合は元の版へ戻す。

置き換えた一式が起動できるかどうかまでは、SHA-256 では分からない。照合が保証するのは「公開されている配布物そのものを取れたこと」までである。そこでヘルパは、入れ替えた後に起動し直した App を数秒見る。そこで落ちていれば退避しておいた一式へ戻し、取得した zip を捨てて現行版で開き直す。戻せなかった場合だけは、壊れた一式を起動し直そうとせず、`.old` を手で戻す先を伝えて終える。

起動直後に終わること自体は異常ではない。既に別の App が動いていた場合と、取得しておいた更新をヘルパへ渡した場合は、どちらも正常な終了として扱われる。戻す判断に使うのは、終了コードが 0 以外だった場合だけである。

見ているのはプロセスが落ちたかどうかである。落ちずに止まる形の失敗 (ウィンドウを作れないまま常駐してしまう等) はここでは捕まらない。

置き換えると、直前の一式は `app.old` / `cli.old` として同じ場所に残る。次の起動がこれを消す。ウイルス対策ソフトに掴まれているなどで消せない場合は、`app.old.trash-<英数字>` のように名前をずらしてから置き換えを進め、消せるようになった時点で片付ける。**消せない残骸が置き換えを止めることはない。** 名前をずらすことすらできない場合だけ今回の置き換えを見送り、取得した zip を残したまま現行版で起動する。その場合は設定カードの「本体の更新」欄にその旨を出す。

`dotnet run` や `bin\` 配下の手元ビルドは版を持たない (`0.0.0-dev`) ため、確認も置き換えも行われない。
Expand Down
Loading
Loading