Hallo,
ich habe folgendes Problem:
Ich habe mehrere kleinere Tools die ich über Clickonce installiert habe.
Diese Sammlung wollte ich jetzt über eine Art Verwaltungstool via Process.Start("ToolName.exe"); öffnen.
Leider bekomme ich immer eine Fehlermeldung mit dem Kontext das die gesuchte .exe nicht gefunden werden kann.
Habt ihr einen Tipp wie ich dieses Problem lösen kann ?
Wenn Du das Process.Start so ausführst, müsste die exe im selben Ordner liegen, wie dein Verwaltungstool, das tut sie aber sehr sicher nicht, da ClickOnce die Dateien intern mit sehr ekligen Ordner-Namen verwaltet.
Wenn ich mir anschaue, wo eine unserer ClickOnce-Anwendungen aktuell liegt, finde ich das:
C:\Users\[User-Name]\AppData\Local\Apps\2.0\954NN44N.E5V\OPLD9HKO.CKB\[Teil des App-Namens]_0000000000000000_0000.00c1_53eaab1a0c395059\[App-Name].exe
Ich denke nicht, dass Du in genau diesem Ordner suchst 😉
Besonders da der Ordner sich auch ändern kann, das wird alles von ClickOnce verwaltet, es liegt aber immer in dem Apps-Ordner.
Wir öffnen die Anwendung über eine "appref-ms"-Datei. Die wird soweit ich weiß durch den ClickOnce-Installer erstellt und im Startmenü eingebunden. Ich könnte mir vorstellen, dass ein simples Process.Start auf diese Datei die Anwendung startet.
Wenn ich die im Text-Editor öffne, sieht das aber nicht sehr komplex aus, die kannst Du zur Not auch selber erzeugen, sogar zur Laufzeit.
file://[Netzwerk-Pfad]/[App-Name].application#[App-Name].application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=x86
Also entweder Du baust dir eine Suche für den AppData\Local\Apps-Pfad oder Du arbeitest mit der "appref-ms"-Datei. Ich würde zu Letzterem tendieren.
Alternativ kannst Du auch schauen, dass Du die Anwendung ohne exe-Pfad starten kannst, dafür muss der Ordner aber registriert sein:
https://stackoverflow.com/questions/10199335/launching-external-programs-in-c-sharp-without-knowing-the-exact-path
Da ClickOnce seine Ordner aber durchaus auch mal ändern kann (ich würde nicht vom Gegenteil ausgehen), ist das aber mMn. keine gute Option.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.