Laden...

Aufrufen eines über Click Once installierten Projektes

Erstellt von Bradley vor 5 Jahren Letzter Beitrag vor 5 Jahren 951 Views
B
Bradley Themenstarter:in
153 Beiträge seit 2014
vor 5 Jahren
Aufrufen eines über Click Once installierten Projektes

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 ?

[Space Opera Blog](http://bradley-software.blogspot.com/)
[Space Opera Forum](http://forum.bradley-labs.de/)
2.079 Beiträge seit 2012
vor 5 Jahren

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.