Editierbares Namensfeld für Einträge (Namenskollision bei gleichem Dateinamen, unterschiedlichem Pfad) #1
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
DasAoD/watchdog#1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
Wird ein Programm hinzugefügt, wird der Anzeigename automatisch aus dem Dateipfad (Dateiname) generiert. Trägt man zwei Einträge mit identischem Dateinamen, aber unterschiedlichem Speicherort ein – z.B. dieselbe .exe, die an zwei verschiedenen Orten liegt (
C:\A\programm.exeundC:\B\programm.exe) – erscheint die Meldung, dass ein Programm mit diesem Namen bereits vorhanden ist, obwohl es sich um zwei unabhängig zu überwachende Einträge handelt.Ursache
Der Eintragsname wird aus dem Dateipfad abgeleitet statt frei vergeben zu werden. Bei gleichem Dateinamen entsteht dadurch zwangsläufig ein Namenskonflikt, unabhängig davon, ob es sich um dieselbe oder unterschiedliche Dateien handelt.
Vorschlag
Workaround (aktuell)
Programmdateien umbenennen, damit Dateinamen eindeutig sind.
Ergänzung: Prozesserkennung betroffen
Bei der Analyse ist aufgefallen, dass das Problem tiefer sitzt als nur die Anzeige:
is_process_running()(aktuellwatchdog.py, Funktion um Zeile 437) prüft nur den reinen Prozessnamen überpsutil.process_iter(['name']). Bei zwei Einträgen mit identischer .exe an unterschiedlichen Speicherorten kann der Watchdog nicht unterscheiden, welche der beiden Instanzen läuft – er hält fälschlich beide Einträge für "läuft", auch wenn nur eine der beiden Dateien tatsächlich gestartet wurde.Ergänzter Fix-Umfang:
is_process_running()vergleicht zusätzlich zum Namen den vollständigen Pfad (proc.exe()gegen den konfigurierten Pfad), mit Fallback auf reinen Namensvergleich fallsproc.exe()nicht ermittelbar ist (z.B.AccessDeniedbei unterschiedlichen Rechten von Watchdog- und Zielprozess)ProcessName-Feld (aus Dateiname abgeleitet, für die Prozesserkennung) vs. frei editierbaresName-Feld (Anzeige)ProcessNamewird beim Laden ausPathabgeleitet)Wird auf einem Feature-Branch umgesetzt.
Umgesetzt und gemergt über #2.