Ich habe meinen eigenen Server, auf dem ich das App-Installationsprogramm über FTP hochgeladen habe. Sein Name ist quickmargo Setup 1.0.0.exe
und es ist verfügbar bei
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.0.exe
Auch über FTP habe ich latest.yml
in dasselbe Verzeichnis hochgeladen und es ist verfügbar unter
https://quickmargo.pl/dist/download/latest.yml
In meinem Projekt in index.js habe ich
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()
}
});
In package.json habe ich "version": "1.0.0",
und drinnen habe build:{}
ich:
"win": {
"icon": "build/icons/icon.ico",
"publish": [{
"provider": "generic",
"url": "https://quickmargo.pl/dist/download"
}]
},
(Andere Plattformen interessieren mich nicht)
Nehmen wir jetzt an, ich habe einige Änderungen an meiner App vorgenommen und möchte Version 1.0.1 hochladen. Ich möchte, dass meine App automatisch aktualisiert wird, wenn jemand das Installationsprogramm bereits heruntergeladen und meine App auf seinem Computer installiert hat.
Sagen Sie mir bitte, ob alles, was ich bisher gemacht habe, in Ordnung ist und was der nächste Schritt ist. Ich betrachte Folgendes:
- Wechseln Sie
version
zu1.0.1
in package.json - Führen Sie den Befehl build erneut im Terminal aus
- Laden Sie das neue Installationsprogramm manuell an denselben Ort auf meinem Server hoch
Bearbeiten
Ich habe die oben genannten drei Schritte ausgeführt und außerdem die neueste Datei "latest.yml" (mit Version 1.0.1) hochgeladen. Wenn ich jetzt die zuvor installierte Version 1.0.0 (vor dem Hochladen einer neuen Version auf den Server) auf einem anderen PC ausführe, ist dies nicht der Fall Stellen Sie fest, dass ich 1.0.1 zum Server hinzugefügt habe und dieser kein Popup oder ähnliches aktualisiert oder anzeigt. Was mache ich falsch?
Bearbeiten 2
Ich versuche es selbst zu lösen und jetzt habe ich 1.0.2 hochgeladen. Der Link zum Herunterladen der App lautet also:
https://quickmargo.pl/dist/download/quickmargo Setup 1.0.2.exe
Bearbeiten 3
Ich habe versucht, es selbst zu lösen. Ich habe den Code in index.js bearbeitet. Ich habe auch oben bearbeitet. alert('Update required!');
im update-available
Ereignis nie auftreten. Es sollte mir ein Fehlermeldungsfenster zeigen, dass die Warnung undefiniert ist. Aber anscheinend wird ein Update-verfügbares Ereignis niemals ausgegeben.
Zusätzliche Information:
- Meine App wurde mit Vue-Electron
v1.0.6
Boilerplate generiert . - Meine Elektronen-Updater-Version ist
4.1.2
npm run build
.electron-vue/build.js
Rufen Sie tatsächlich einen Code von Boilerplate auf, in dem Sie diese Datei im obigen Link sehen können (zum Beispiel setzt sie NODE_ENV auf Produktion. Das Skript in package.json lautet :"build": "node .electron-vue/build.js && electron-builder",
.- Ich möchte keine Releases bei github hosten, da mein Repository privat ist und ich in elektron.build-Dokumenten einige Informationen gesehen habe , die ich nicht tun sollte.
- Ich habe in einigen Ausgaben auch Informationen gesehen, dass ich nur für Releases ein neues Repo erstellen könnte, aber ich betrachte das Hosten von allem auf meinem eigenen Server als saubereren Ansatz.
quelle
electron-log
, der dem autoUpdater einen Logger zur Verwendung gibt (const logger = require("electron-log"); autoUpdater.logger = logger; logger.transports.file.level = "debug";
). Dies sollte Informationen ausdrucken, wenn Ihre Server wurde gefunden und ob ein Update gefunden wurde. Wenn Sie eine Fehlermeldung erhalten, können Sie diese Ihrer Frage hinzufügen.Antworten:
Ich konnte eine automatische Update-Konfiguration mithilfe einer
generic
Veröffentlichungsoption einrichten, die den Dokumenten folgt, nachdem ich dies noch nie zuvor getan hatte. Es ist also definitiv machbar und erfordert keine Signatur über ein Zertifikat, aber ich hatte anfangs Probleme, weil ichpublisherName
in der Build-Konfiguration festgelegt hatte, aber kein Zertifikat. Wenn in der aktuellen Version ein Herausgeber oder Zertifikat angegeben wurde und in der neuen nicht, wird es auch nicht installiert.1. Aktivieren Sie die Protokollierung
Sie können die Protokollierung des
electron-updater
Pakets aktivieren,electron-log
indem Sie den Logger installieren und dann dem folgenden zuweisenautoUpdater
:Die Standardausgabepfade sind:
~/.config/<app name>/log.log
~/Library/Logs/<app name>/log.log
%USERPROFILE%\AppData\Roaming\<app name>\log.log
Wenn die folgenden Schritte Ihre Probleme nicht lösen, veröffentlichen Sie bitte den Protokollinhalt.
2. Rufen Sie nicht an
autoUpdater.setFeedURL()
In den offiziellen Dokumenten heißt es :
Die URL ist bereits in Ihrem
publish
Provider-Objekt definiert und reicht aus, damit der Updater damit arbeiten kann. Auch eine URL-Zeichenfolge als Argument vonsetFeedURL()
ist falsch, es sollte sich um ein Optionsobjekt handeln . Aber auch hierpublish
ist es ausreichend , alles in Ihrem Provider anzugeben .3. Laden Sie die
.blockmap
Dateien auch auf Ihren Server hochDiese sollten zusätzlich zu Ihren Setup-
.exe
Dateien beim Erstellen erstellt werden . Andernfalls werden in Ihrem Protokoll Fehler angezeigt, dass die Dateien der alten und der neuen Version nicht zum Vergleich gefunden wurden.4. Fügen Sie Ihrer Update-Server-URL einen abschließenden Schrägstrich hinzu
Stellen Sie sicher, dass der
url
Parameter Ihres Provider-Objekts mit einem Schrägstrich endet. Während die yml-Datei möglicherweise immer noch ohne sie gefunden wird, kann es ansonsten zu Problemen beim eigentlichen Download kommen.5. Versuchen Sie es mit dem einfacheren Ansatz
autoUpdater.checkForUpdatesAndNotify()
Anstatt die flexiblere, aber auch kompliziertere Methode zu verwenden, um die verschiedenen Aktualisierungsereignisse abzuhören und in Ihrer App darauf zu reagieren, versuchen Sie zunächst, sie mit dem folgenden Code zum Laufen zu bringen. Sobald dies funktioniert, können Sie zur besseren Benutzererfahrung immer noch die verschiedenen Ereignisse behandeln.
Dadurch wird das Update im Hintergrund überprüft, heruntergeladen und automatisch installiert, sobald Sie Ihre App schließen. Eine Standard-Windows-Benachrichtigung wird angezeigt, um Sie über das verfügbare Update und die Vorgehensweise zu informieren.
quelle
Full: 151,317.35 KB, To download: 1,152.69 KB (1%)
. Danach passiert jedoch nichts mehr. Die App wird nicht aktualisiert. Sind Sie sicher, dass diescheckForUpdatesAndNotify
ausreicht, um die App zu beenden, wenn sie eine neue Version gefunden hat? Laden Sie dann die neue Version herunter und installieren Sie sie?update-available
protokolliere einen Text, den ich sehen kann, der aberupdate-downloaded
nie ausgegeben wird, da ich bei diesem Ereignis kein Protokoll sehen kann. Was könnte der Grund dafür sein, dass das Herunterladen nicht gestartet / beendet wird (obwohl ich nicht einmal weiß, welches)?checkForUpdatesAndNotify
sollte eine Benachrichtigung anzeigen, sobald der Download erfolgreich war, und die App sollte aktualisiert werden, sobald Sie sie schließen. Aber wenn dasupdate-downloaded
Ereignis nie ausgelöst wird, kommen Sie nicht so weit. Es fällt mir jedoch schwer zu sagen, was das Problem verursacht.update-available
, aberupdate-downloaded
nicht. Ich weiß noch nicht warum. Ich werde versuchen, es neues, leeres Repository zu reproduzieren.Cannot download differentially, fallback to full download: Error: Received data length 1527 is not equal to expected 634.
Außerdem wird versucht, nach dem Beenden der App zu aktualisieren und um Administratorrechte zu bitten. Und wenn ich es nicht zulasse, kann ich die App mit der vorherigen Version erneut ausführen. Dies ist ein Verhalten, das ich nicht möchte. Ich möchte Benutzer zwingen, das Update zu installieren. Ich verwende autoUpdater.quitAndInstall (), aber es wird nicht beendet.