-
Notifications
You must be signed in to change notification settings - Fork 313
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
インストール先を変更可能にしたい #210
Comments
electron-builder は使ったことがないので試してはいませんが、 また、 |
今はかなり簡易的なインストーラーになっていると思います(必要ファイルをダウンロードし、結合して解凍後、フォルダにコピーする形) electron-builderのnsisでは、インストーラーフレームワーク(?)であるnsisに対して特に制限がかけられているようには見えず、全機能を使えるはずです。 (nsisについては少々、といったレベルではありますが、知見があるので手が空き次第取り掛かってみたいとは考えています) |
へーー あのよく見かける感じな見た目のダイアログにもできそうですね。 |
なるほど、昇格後にやりなおしになってしまうんですね。
|
こちらの件についてですが、electron-builderのテンプレートスクリプトで 解決方法としては、 ; pre install process
!macro customInit
!insertmacro defineVariables
!insertmacro checkDiskSpace
; download files ↓ ; pre install process
!macro customInit
!insertmacro defineVariables
${ifNot} ${UAC_IsAdmin}
!insertmacro UAC_RunElevated
${endif}
!insertmacro checkDiskSpace
; download files |
最初から管理者権限で立ち上げる場合であっても、これが一番綺麗だと思って、それが出来ればなぁと思ってはいます(そこまでできる目処は今のところたってませんが)
NSISはデフォルトなら管理者権限で立ち上がった気がしたので、何かしら設定はあるんだろうなと思っていたんですが、やはりあったんですね...! |
あー、署名されていないものに管理者権限できれば与えたくないって人もいるかも・・・? |
この懸念は割とあるかもですね...
最近のMacほど堅苦しくはないはずなので、試してみます |
署名されていないものでも問題なく起動できますね。 あと、管理者権限を最初から与えると、いきなりインストール先の指定をさせられる感じになりますね。 |
今日 Twitter 上で「インストーラーじゃなくて zip のほうが扱いやすいのに」という主旨の話題もあったのですが、 |
まだベータで正式サービスが始まっていないのでなんとも言えないのですが、OSS向けの無料コードサイニングプロジェクトが中心に立ち上がったようです。 Windows向けバイナリに適用した場合にコードサイニング証明書として同等の効果を持つかは調査できていませんが、これができるのであれば証明書の問題は解決できそうです。 ポータブルインストーラの件は、別途ダウンロード/結合/展開のみをするスクリプト(バイナリ)を配布したほうが良いかと思います。 |
なるほどです。管理者権限周りを整理すると
という感じでしょうか。 |
ポータブル版(zip版)は実際に配って様子見中です。こちらの反応をもとに優先度を決めても良いかもです。 |
先程コメントを投稿したのですが、もう少し追試したかったので一旦取り下げました。
つまるところ、electron-builderのカスタムスクリプトだけの場合は任意のディレクトリにインストールする場合は管理者権限が必要になりそうです。 前提
課題インストール先を変更しようとすると、管理者権限を要求されることがある。 対応とゴール以下のいずれかの方法でダウンロード済みを検知し、スキップするようにする。 方法1
メリット
デメリット
方法2
メリット
デメリット
後者の方法では、lockファイルをインストーラと同じディレクトリに置くようにするだけでユーザーの手間を格段に減らすことができます。 また、「自分でインストール先を変更するウィンドウを作ればいいんじゃないのか」という意見もあるかと思いますが、そちらは調査不足で確認できていません。 |
二通りのアプローチを提案していただきありがとうございます。 個人的には提案いただいた両方の方法の合わせ技で、 そうすれば全体インストール時だけではなく再インストール時も無駄なダウンロードを抑制できますし、
のようにファイルが並んでいれば「インストーラーがなんか追加のファイルを落としてきたんだな」と判断しやすいので、 また、1の方法でデメリットとして挙げられているダウンロードキャンセル時の問題は、ブラウザーがやっているように
というアプローチにすると、キャンセル時だけでなくプロセスの強制終了時にも対応できそうです。 ファイル破損時の処理に関しては、やるとするならば多分こういう流れですよね。
ここまでやった上でインストーラーに署名もあれば、破損だけでなく改ざん対策としても良さそうだと思います。 ただ、ダウンロード完了後にファイル名を変更するアプローチを取れば中途半端なファイルは多くの場合弾けるはずなので、 |
わかりやすい説明ありがとうございます! ちゃんと追えていなかったのでとても助かりました。 ダウンロード中に容量いっぱいになって破損ファイルができるのは僕自身経験したので、極力避けたいところです。 renameする方法だとインストール後に7zファイルを消去できないんでしたっけ。 |
7z の消去自体は特に問題なくできると思います。 簡単に説明すれば、インストーラーでの UX を zip 版以下にするべきではないから、というのが理由です。 zip ならダウンロードを一度だけすれば何度でも再インストール(解凍)できたし、 誰もが快適な回線環境でファイルをダウンロードするわけではないので、 |
盲点でした。 これを3つに分けた場合、ダウンロード時に表示されるダウンロードウィンドウが1回から3回表示されることになります。 また、インストーラーと同じ場所に保存するのもいいアイデアだと思います。
こちらの件ですが、 また、「一度ダウンロードしたインストーラーをローカルでコピーして他のコンピュータにもインストールしたい」のであれば、以下のようにするほうが良いのかと思います。
そのとおりです。分割したファイルのハッシュ値をインストーラーで保持しておいて、そこから実行するか勘案するというものです。
この順番であれば、 もし
|
@oov |
プラグインのドキュメントを見る限りでは
なるほど、現状のビルド順序だと 7z ファイルのハッシュ値はインストーラーに埋め込めても、分割済みファイルのハッシュ値は埋め込めないんですね。
検証自体はスキップはできます。 例えば悪意ある これを防ぐためには最低でも結合後のファイルの検証が必要で、 @HyodaKazuaki さんの記述はカスタムスクリプトに自動で埋め込めるという話だと理解したのですが、
なるほど、素晴らしいです。 ただ、最終的にファイルを結合して 7z を残すのだとしても、異常終了時にも問答無用で 7z.0 などを削除する処理が入っていると
というのが、回線環境が良くないユーザーにとっても親切だと思います。 というのも踏まえると、ハッシュ値リストのテキストファイルも存在する場合のインストーラーのダウンロード時の大まかな動作としては、
のような流れでしょうか。 |
確かにその方がいくつダウンロードするかも明確になるのでわかりやすいですね。良い機能だと思います。
前者を想定していましたが、よく考えると難しいかもしれないですね。 たしか、electron-builderは最初から7ZIPファイルのチェックサムを埋め込んでインストーラーを作成していたと思います。 ただ、electron-builderが提供しているチェックサム機能はカスタムスクリプトの後で呼び出されます。 そこで、テンプレートスクリプトからチェックサムが代入されている変数を探し出し、カスタムスクリプト内でチェックするようにしたほうが良いかと思います。
おっしゃるとおりです。
そうですね、その流れで良いと思います。 |
ハッシュ値の照合ですが、どれくらいの優先度だと考えられていますか? @oov @HyodaKazuaki というのも、ハッシュ値照合はちょっと実装に時間がかかるかもしれなそう?なのと、 個人的にはまあ順番に作るという意味で、ハッシュ値照合が付け足せるようにしつつ先にキャッシュ機構作っちゃうのが良いのかなと思ってます。 |
今現在のインストーラーが照合せずに動作していることを踏まえると、 また、ハッシュ値の埋め込み手法についても少し調べました。 |
チェックサムはelectron-builderにあるので、喫緊の課題ではないと言えます。
キャッシュ機構があればZIP配布しなくていいというのは、インストーラーをダウンローダーとして使うということでしょうか?
なかなか興味深いです。これは electon-builderによるチェックサムの実装は以下にあります。 |
確かにチェックサムが一致しないのが原因で突っぱねられて、GitHub に自分で落としに行こうとして失敗するという流れになるまでを確認しました。
こちらも確認しました。
そうです。 しかしちょっとスクリプトを触ってみましたが、想像以上にだいぶ辛いですね……。 |
おっしゃるとおり、ビルドに時間がかかりすぎてトライアンドエラーしていられないのが現状です。
解決策としては、インストーラー用の軽量なElectronプロジェクトを用意し、そこでカスタムスクリプトを試すというのがあります。
electron-builderのカスタムスクリプトである以上は、ビルドしないとインストーラーの挙動を確認できないのは変わらずといったところです。 |
少し時間が経ってしまいましたが、NSIS のスクリプトをある程度学んだのでまずはドラフトでPRを作成しました。 分割ファイルのハッシュ値の照合について後回しにしようと思っていたのですが、どのようなアプローチが取れるか調査する過程で結局実装してしまいました。 分割ファイルのハッシュ値の exe への埋め込みについてJavaScript から exe のリソースにデータを埋め込む方法を試しそれは成功したのですが、 破損チェックのためのものなので CRC 自体も更新すれば動くでしょうし、起動オプション |
お待たせいたしました、レビューお願いします。 |
@oov お疲れさまです。わたしもPR確認させていただきます。 |
先ほどプレリリースしたバージョン0.6.0にて、ちゃんと保存先を変えられそうなことが確認できました。 |
内容
インストール先を変更したい。
Pros 良くなる点
Cドライブ以外にもインストールできるようになる
Cons 悪くなる点
実装には調査が必要
実現方法
今はelectron-builderのnsisを利用しているけど、設定で変えられたりするのかな・・・?
VOICEVOXのバージョン
0.5.1
The text was updated successfully, but these errors were encountered: