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.")