Setup-Installer, Einzelinstanz-Schutz und Update-System mit einer einzigen Installation
- Inno-Setup-Installer (packaging/playtube.iss): installiert pro Benutzer nach %LOCALAPPDATA%\Programs\Playtube, feste AppId -> jede neue Version ueberschreibt die vorhandene Installation an Ort und Stelle, raeumt den alten _internal-Ordner auf und beendet laufende Playtube-Prozesse vor dem Kopieren - Updater: installierte Kopie nimmt das kleine Patch (Versionseintrag in "Apps & Features" wird nachgezogen), portable Kopie wechselt per stillem Setup in die regulaere Installation; Patch nur bei passender PySide6-Version (steht im Dateinamen), sonst Setup; Aufraeumen des heruntergeladenen Installers - Einzelinstanz-Schutz (playtube/single_instance.py): zwei Prozesse auf demselben Browser-Profil liessen auf YouTube alle Icons verschwinden; ein zweiter Start holt jetzt das laufende Fenster nach vorn (auch .play-Patchdateien werden weitergereicht) - build.ps1 baut den Installer mit, Release-Pipeline haengt ihn an jedes Release - README: Installation, Update-Ablauf, Troubleshooting fuer fehlende Icons
This commit is contained in:
+12
-4
@@ -1,10 +1,12 @@
|
||||
"""Erstellt bei Bedarf eine Windows-Startmenue-Verknuepfung sowie die Dateizuordnung
|
||||
fuer die eigene ".play"-Patchdateiendung.
|
||||
|
||||
Playtube wird als portables ZIP ausgeliefert (kein MSI/Installer) - ohne das gaebe es
|
||||
also nie einen Eintrag im Windows-Startmenue, wie man ihn von "richtig installierten"
|
||||
Programmen kennt. Wird beim Start der gepackten .exe einmalig nachgeholt (idempotent -
|
||||
prueft vorher, ob die Verknuepfung schon existiert)."""
|
||||
Playtube-Setup (packaging/playtube.iss) legt Startmenue-Eintrag und Dateizuordnung
|
||||
selbst an. Fuer eine portable, aus einem ZIP entpackte Kopie gaebe es sonst nie einen
|
||||
Eintrag im Windows-Startmenue - der wird beim Start der gepackten .exe einmalig
|
||||
nachgeholt (idempotent - prueft vorher, ob die Verknuepfung schon existiert). Eine durch
|
||||
Setup installierte Kopie fasst die Verknuepfung nicht an, damit sie nicht versehentlich
|
||||
wieder auf eine andere (portable) Kopie umgebogen wird."""
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
@@ -21,6 +23,12 @@ def _find_icon(exe_dir: Path) -> Path | None:
|
||||
def ensure_start_menu_shortcut(app_name: str) -> None:
|
||||
if sys.platform != "win32" or not getattr(sys, "frozen", False):
|
||||
return
|
||||
# Import erst hier: shortcuts.py wird vor dem restlichen Qt-Setup importiert (siehe
|
||||
# main.py), updater.py zieht PySide6 nach.
|
||||
from .updater import is_installed_via_setup
|
||||
|
||||
if is_installed_via_setup():
|
||||
return # Verknuepfung gehoert dem Installer (siehe Moduldoku)
|
||||
try:
|
||||
appdata = os.environ.get("APPDATA")
|
||||
if not appdata:
|
||||
|
||||
Reference in New Issue
Block a user