FTP経由でアプリインストーラーをアップロードしたサーバーがあります。その名前は_quickmargo Setup 1.0.0.exe
_で、次の場所で入手できます。
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe
また、FTP経由で_latest.yml
_を同じディレクトリにアップロードしました。
https://quickmargo.pl/dist/download/latest.yml
Index.jsのプロジェクトでは、
_import { autoUpdater } from 'electron-updater'
autoUpdater.setFeedURL('https://quickmargo.pl/dist/download');
autoUpdater.on('update-downloaded', () => {
autoUpdater.quitAndInstall()
});
autoUpdater.on('update-available', (ev, info) => {
alert('Update required!');
});
app.on('ready', async () => {
if (process.env.NODE_ENV === 'production') {
await autoUpdater.checkForUpdates()
}
});
_
Package.jsonには_"version": "1.0.0",
_があり、内部には_build:{}
_があります。
_"win": {
"icon": "build/icons/icon.ico",
"publish": [{
"provider": "generic",
"url": "https://quickmargo.pl/dist/download"
}]
},
_
(他のプラットフォームは気にしません)
ここで、アプリに変更を加えて、バージョン1.0.1をアップロードしたいとします。誰かがインストーラをダウンロードして自分のマシンにインストールした場合、アプリを自動更新したいとします。
これまでに作成したものすべてに問題がなく、次のステップが何かあれば教えてください。私は以下を検討します:
version
を_1.0.1
_に変更します編集
上記の3つのステップを実行し、新しいlatest.yml(バージョン1.0.1を使用)もアップロードしました。その結果、以前にインストールされた(新しいバージョンをサーバーにアップロードする前に)バージョン1.0.0を他のPCで実行した場合、実行されません。サーバーに1.0.1を追加したことを検出します。更新されないか、ポップアップや何かが表示されません。私は何を間違っていますか?
編集2
私はそれを自分で解決しようとしています、そして今私は1.0.2をアップロードしたので、アプリをダウンロードするためのリンクは次のとおりです:
https://quickmargo.pl/dist/download/quickmargo セットアップ1.0.2.exe
編集3
私はそれを自分で解決しようとしていました、index.jsのコードを編集しました。上記も編集しました。 _update-available
_イベントでalert('Update required!');
が発生することはありません。アラートが未定義であることを示すエラーメッセージウィンドウが表示されます。しかし、どうやらupdate-availableイベントは決して発行されません。
追加情報:
v1.0.6
_ボイラープレートで生成されました。4.1.2
_ですnpm run build
_は実際に_.electron-vue/build.js
_にあるボイラープレートからいくつかのコードを呼び出します。このファイルは上記のリンクにあります(たとえば、NODE_ENVを本番に設定します。package.jsonのスクリプトは_"build": "node .electron-vue/build.js && electron-builder",
_です。私はこれまで行ったことがない、ドキュメントに従ってgeneric
公開オプションを使用して自動更新構成をセットアップできました。したがって、それは確実に実行可能であり、証明書による署名は必要ありませんが、ビルド構成でpublisherName
を設定したので証明書がないため、最初は問題がありました。現在のバージョンに発行元または証明書が指定されていて、新しいバージョンには指定されていない場合も、インストールされません。
1。ロギングを有効にする
_electron-updater
_もインストールして、ロガーをautoUpdater
に割り当てることにより、_electron-log
_パッケージのロギングを有効にすることができます。
_const log = require('electron-log');
autoUpdater.logger = log;
autoUpdater.logger.transports.file.level = 'info';
_
デフォルトの出力パスは次のとおりです。
~/.config/<app name>/log.log
_~/Library/Logs/<app name>/log.log
_%USERPROFILE%\AppData\Roaming\<app name>\log.log
_次の手順で問題が解決しない場合は、ログの内容を投稿してください。
2。 autoUpdater.setFeedURL()
は呼び出さないでください
公式ドキュメント 状態:
setFeedURL は呼び出さないでください。 electron-builderは、ビルド時に_
app-update.yml
_ファイルをresources
に自動的に作成します(このファイルは内部にあるため、意識する必要はありません)。
URLはpublish
プロバイダーオブジェクトで既に定義されており、アップデーターを操作するにはこれで十分です。また、setFeedURL()
の引数としてのURL文字列は正しくありません オプションオブジェクトである必要があります 。ただし、publish
プロバイダーですべてを指定するだけで十分です。
3。また、_.blockmap
_ファイルをサーバーにアップロードします
これらは、ビルド時にセットアップ_.exe
_ファイルに加えて作成する必要があります。それ以外の場合、古いバージョンと新しいバージョンのファイルが比較のために見つからなかったというエラーがログに表示されます。
4。更新サーバーのURLに末尾のスラッシュを追加します
プロバイダーオブジェクトのurl
パラメーターがスラッシュで終わっていることを確認してください。 ymlファイルがなくてもymlファイルが見つかる場合がありますが、実際のダウンロード中に問題が発生する場合があります。
5。 autoUpdater.checkForUpdatesAndNotify()
を使用して、より簡単な方法を試してください
より柔軟であるが、より複雑な方法でさまざまな更新イベントをリッスンし、アプリ内でそれらに反応する代わりに、まず次のコードで動作するようにしてください。それがうまくいったら、ユーザーエクスペリエンスを向上させるために、さまざまなイベントの処理に戻ることができます。
_app.on('ready', async () => {
autoUpdater.checkForUpdatesAndNotify();
});
_
これにより、バックグラウンドでアップデートを確認してダウンロードし、アプリを閉じるとすぐに自動的にインストールします。デフォルトのWindows通知がポップアップし、利用可能なアップデートと手順について通知します。