From 082e8b8b5518f3716cdec0a70ab1652dd34be003 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 28 Aug 2026 14:38:17 +0200 Subject: [PATCH] fix(windows): der Knopf "Rippy oeffnen" oeffnete Rippy nicht Nach einer erfolgreichen Einrichtung schloss er nur das Fenster, und danach passierte nichts mehr: Der Dienst lief nicht, kein Fenster ging auf. Der Commander hat Rippy anschliessend selbst gestartet ("das tool selbst laesst sich starten") -- was den Fehler verdeckt hat. Ein Knopf, der etwas anderes tut als seine Beschriftung sagt, ist schlimmer als keiner. Jetzt startet main() nach einem geglueckten Assistenten das installierte Programm. Dazu der zweite Teil des Netzlaufwerk-Befunds: Auch Netz-ANMELDUNGEN haengen am Token der Sitzung, nicht nur die Laufwerksbuchstaben. Ein erhoehter Prozess kennt die Zugangsdaten zur Freigabe nicht und bekommt "Zugriff verweigert" -- also dieselbe Meldung wie bei einem echten Rechteproblem. Ein UNC-Pfad mit Administratorrechten wird jetzt als solcher erkannt und erklaert. Ampel lokal: 705 gruen, ruff sauber. Co-Authored-By: Claude Opus 5 --- src/rippy/einrichtung.py | 11 +++++++++++ src/rippy/test_einrichtung.py | 22 ++++++++++++++++++++++ src/rippy/windows_app.py | 11 +++++++++++ 3 files changed, 44 insertions(+) diff --git a/src/rippy/einrichtung.py b/src/rippy/einrichtung.py index ff91408..c386d53 100644 --- a/src/rippy/einrichtung.py +++ b/src/rippy/einrichtung.py @@ -231,6 +231,17 @@ def pruefe_schreibrecht(ziel: str, probe=None, erhoeht=None) -> dict: ("Statt des Laufwerksbuchstabens den UNC-Pfad eintragen " "(\\\\Server\\Freigabe)." + zusatz)) + if (ziel or "").startswith("\\\\") and laeuft_erhoeht(erhoeht): + # Auch Netz-ANMELDUNGEN hängen am Token der Sitzung, nicht nur die + # Laufwerksbuchstaben. Ein erhöhter Prozess kennt die Zugangsdaten + # zur Freigabe deshalb nicht und bekommt „Zugriff verweigert" — + # dieselbe Meldung wie bei einem echten Rechteproblem. + return _eintrag( + "Schreibrecht", FEHLER, "%s (%s)" % (ziel, grund), + "Als Administrator gestartete Programme kennen die Anmeldung an " + "der Freigabe nicht. Rippy ohne Administrator starten — dann " + "geht der Netzwerkpfad.") + if _unter_programme(ziel): return _eintrag( "Schreibrecht", FEHLER, "%s (%s)" % (ziel, grund), diff --git a/src/rippy/test_einrichtung.py b/src/rippy/test_einrichtung.py index 0ddc91d..c8cd157 100644 --- a/src/rippy/test_einrichtung.py +++ b/src/rippy/test_einrichtung.py @@ -239,3 +239,25 @@ def test_vorgaben_sind_vollstaendig(): assert v["port"] == 7788 assert v["ziel"] and v["ablage"] assert "/app/" not in v["ablage"], "Container-Pfad in einer Windows-Vorgabe" + + +def test_netzwerkpfad_als_administrator_wird_erklaert(): + """Der zweite Teil des Befunds: Auch Netz-ANMELDUNGEN haengen am Token + der Sitzung. Ein erhoehter Prozess kennt die Zugangsdaten zur Freigabe + nicht und bekommt 'Zugriff verweigert' -- dieselbe Meldung wie bei einem + echten Rechteproblem.""" + B = chr(92) + befund = e.pruefe_schreibrecht( + B + B + "NAS" + B + "Filme", probe=(False, "Zugriff verweigert"), + erhoeht=True) + assert befund["zustand"] == e.FEHLER + assert "ohne Administrator" in befund["abhilfe"] + + +def test_netzwerkpfad_ohne_administrator_bekommt_die_normale_meldung(): + B = chr(92) + befund = e.pruefe_schreibrecht( + B + B + "NAS" + B + "Filme", probe=(False, "Netzwerkpfad nicht gefunden"), + erhoeht=False) + assert befund["zustand"] == e.FEHLER + assert "Administrator" not in befund["abhilfe"] or "keine" in befund["abhilfe"] diff --git a/src/rippy/windows_app.py b/src/rippy/windows_app.py index 7f4fe38..c68f0c2 100644 --- a/src/rippy/windows_app.py +++ b/src/rippy/windows_app.py @@ -649,6 +649,17 @@ def main(argv=None) -> int: if "--still" not in argv and "--ohne-assistent" not in argv: ergebnis = assistent_starten() if ergebnis.get("ok"): + # ⚠️ Und jetzt Rippy auch WIRKLICH starten. + # + # Der Knopf am Ende des Assistenten heisst „Rippy oeffnen". Bis + # hierher schloss er nur das Fenster, und danach passierte nichts + # mehr: Der Dienst lief nicht, kein Fenster ging auf. Ein Knopf, + # der etwas anderes tut als sein Beschriftung sagt, ist schlimmer + # als keiner. + programm = os.path.join(ergebnis.get("ziel") or + reg.standard_installationsordner(), + "Rippy.exe") + starte_fensterprozess(programm) return 0 if ergebnis.get("abgebrochen"): melden("Abgebrochen — es wurde nichts veraendert.")