Laden...

Liveupdate für ein Programm das vom Netzlaufwerk gestartet wird

Erstellt von sharpType vor 12 Jahren Letzter Beitrag vor 12 Jahren 5.402 Views
Hinweis von gfoidl vor 12 Jahren

Der Thread beginnt mit einer Frage nach einem bestimmten Lösungsweg, dahinter steckt aber das im Titel und weiter unten genannte Wurzelproblem.

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren
Liveupdate für ein Programm das vom Netzlaufwerk gestartet wird

Hallo Profis,

ich habe eine kurze Frage, denn ich kann dazu irgendwie nichts im Netz finden. Ich habe ein Programm, welches ich über eine Verknüpfung starte in Version X. Nun aktualisiere ich das Programm auf Version Y und möchte für den Fall, dass jmd das Programm über die Verknüpfung startet die alte Verknüpfung löschen und durch eine Neue auf Version Y ersetzen. Aber eben nur, wenn das Programm über eine Verknüpfung gestartet wurde.

Wie kann man das denn herausfinden? 🤔

Vielen Dank schon mal 🙂

Grüße

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo sharpType,

du kannst ja in die Verknüpfung einfach einen Parameter z.B. --link schreiben und im Main schauen, ob der übergeben wurde.

herbivore

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Hey,

danke für den Tipp, das würde gehen, aber dann muss ich die Verknüpfung nachträglich anpassen (gehen wir mal von einem Laien aus, der sich einfach ne blöde Verknüpfung auf den Desktop gezogen hat und für den alles andere "zuviel" ist). Weiterhin wüsste ich nicht, wie ich dann den vollständigen Pfad der Verknüpfung (also wo die Verknüpfung liegt, von der aus das Programm gestartet wurde) herausbekomme. Hintergedanke ist dieser, dass ich die alte Verknüpfung löschen möchte und eine neue erstelle, die auf die aktuellste Version des Programms verlinkt.

Denn wenn das Programm gestartet wird, kommt, falls es eine neue Version gibt, ein Hinweisfenster und da soll gefragt werden, ob die Verknüpfung aktualisiert werden soll. Das ist das Ziel.

🤔

A
764 Beiträge seit 2007
vor 12 Jahren

Das wird so nicht funktionieren. Du hast keine Kontrolle über die Verknüpfung.

Mögliche Lösungen:

  • Du bietest in deinenm Program an, eine Verknüpfung zu erstellen, dann hast du die Kontrolle darüber.

  • Du Startest mit einem VersionSelector (da zeigt die Verknüpfung drauf) und der merkt sich, welche Version verwendet werden soll, oder bietet eine Auswahl.

916 Beiträge seit 2008
vor 12 Jahren

Jetzt mal ne ganz blöde Frage wieso brauchst du das überhaupt. Wird denn die neue Version woanders als die alte installiert? Sonst ist das m.E. nach gar nicht nötig, weil die Verknüpfung ja immer noch auf das selbe Ziel verweist, halt nur auf eine "neue" Version.

Again what learned...

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Hi,

schade, aber ich glaube dann muss ich ein Extratool basteln, was als Versionselector fungiert 😕 Aufwändig, aber geht scheinbar dann nicht anders. Habe mir sowas ähnliches schon gedacht.

Ich brauche das, weil ich auf einem Netzlaufwerk für eine neue Version immer einen neuen Programmordner mit einem neuen Release erstelle (Version wird hochgezählt und steht im Ordnername). Grund dafür ist, dass das Tool ca. 5 bis maximal 200 Leute benutzen und vom Netzlaufwerk starten und ich dann natürlich nicht - oder nur Nachts, wenn keiner da ist - die Chance hätte den alten Ordner durch den neuen zu ersetzen, da Datei möglicherweise in Verwendung etc.

Desweiteren ist es doch blöd, da man nie ausschließen kann, dass in einer neuen Version nicht mal was "kaputtprogrammiert" wurde und so hat der Anwender die Möglichkeit noch ne alte Version zu starten, wenn er Bedarf sieht. Dafür wäre natürlich ein Versionselector ganz gut. Aber prinzipiell nervig, weil man vorher eine Auswahl treffen muss.

🙂

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo sharpType,

warum bentutzt du nicht ClickOnce od. eine Auto-Updater wie z.B. updateSystem.NET?

Das mit dem "kaputtprogrammieren" sollte durch automatische Tests ausgeschlossen sein bzw. werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Das Updatesystem kannte ich noch gar nicht. Problem ist: Das ist in einer Firma und da ist es mit der IT oftmals nicht so einfach, daher ist es derzeit nur möglich von einem Netzlaufwerk zu starten. Alles andere würde den Rahmen sprengen und dafür suche ich eine "einfache" Lösung.

Ich weiß, dass es da professionelle Lösungen für gibt, aber das würde für meinen spezifischen Anwendungsfall unter Berücksichtigung der leider vorhandenen engen Rahmenbedingungen seitens der Firma/IT zu weit führen, leider 😦

1.820 Beiträge seit 2005
vor 12 Jahren

Hallo!

@gfoidl:
Ich vermute mal, dass ClickOnce und updateSystem.Net nicht funktionieren werden, wenn andere Benutzer die Anwendung gerade laufen lassen und die Dateien somit gesperrt sind.

Nobody is perfect. I'm sad, i'm not nobody 🙁

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Also bis jetzt ist es so, dass wenn das Programm gestartet wird es halt ein Hinweisfenster gibt und dort steht, dass eine neue Version existiert (wenn das denn so sein sollte). Das funktioniert, weil er den Ordner kennt (der ist fix), wo das Programm liegt bzw die Versionen und jede Version hat einen Ordner mit ner Nummer + Namen und der Ordnername wird geparst und die höchste Version ist natürlich die neueste und wenn diese höher ist als die, die gerade läuft, dann gibt es halt die Meldung.

Danach jedoch muss man die Verknüpfung mauell umlegen und das gefällt mir nicht besonders. X(

Vorteil ist, dass die alten Versionen wie gewohnt funktionieren und ich nicht 100 Jahre warten muss, bis keiner mehr das Programm nutzt sondern einfach für eine neue Version schnell einen neuen Ordner mache und den entsprechend benenne. Weiterer Vorteil: Ich hab keine Probleme mit der IT, da die Jungs lediglich das Programm vom Netzlaufwerk starten und weiterhin weder was installieren müssen, noch irgendwelche Adminrechte brauchen und und und :evil:

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo tom-essen,

ClickOnce funktioniert schon, denn das sollte dann jeweils lokal ausgeführt werden. Aber das scheidet ja aus.

Hallo sharpType,

mir ist gerade eingefallen, dass du Schattenkopien verwenden könntest. Dann sind die Assemblies nicht gesperrt und können einfach überschrieben werden. Siehe z.B. Shadow Copying of Applications.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Hi Günther,

das mit den Schattenkopien klingt sehr interessant und nutzbar für mein Problem. Allerdings wie verhält es sich, wenn mehrere User das Programm auf dem Netzlaufwerk starten?

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo sharpType,

ich denke dann wird für jeden User eine Schattenkopie auf dem Netzlaufwerk erstellt. Probiert hab ich das noch nicht, aber probiers du einfach mal aus und berichte dann darüber.

Es ist zwar schon eine Zeit lang, als ich mich damit beschäftigte, aber soweit ich noch weiß kann auch das Schattenkopie-Verzeichnis angegeben werden. Das sollte dann heißen dass jeder User dieselbe Schattenkopie verwendet (od. dass es zu einem Problem kommt, da jedesmal ins selbe Verzeichnis zu kopieren versucht wird). Genaueres wissen wir nach einem Test.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Ja ich probiere es mal aus. Habe gesehen, dass das VZ angegeben werden kann. Im Notfall müsste man eben ein Teil des angemeldeten Users mit in den Verzeichnisnamen aufnehmen oder eine Zufallszeichenfolge oder so etwas. Denn wenn sonst der zweite User die Schattenkopie anlegt, dann würde er ja prinzipiell die erste überschreiben wollen (Annahme = gleiches VZ) und dann wären wir beim alten Problem!

Ich überprüfe das mal!

Danke.

3.825 Beiträge seit 2006
vor 12 Jahren

Hallo SharpType,

wenn im Netzwerk keine Windows 7 Rechner sind dann kannst Du das laufende Programm austauschen. Du kannst die aktuelle Exe nach *.ex1 umbennen und die neue Exe reinkopieren.

Wenn im Netzwerk aber mind. ein Windows 7 Rechner mit dem Programm arbeitet dann geht das nicht mehr.

Frage an die anderen : Kann man das umgehen ? Kann man dem Windows 7 sagen dass es die Exe auf dem Netzwerklaufwerk nicht sperren soll ? Kann man da was mit Schattenkopien machen ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Moin,

leider komme ich mit den ShadowCopies nicht weiter denn ich bekomme bei der Ausführung der Methode


domain.ExecuteAssembly(assembly);

immer folgenden Fehler:

Fehlermeldung:
Die Datei oder Assembly "file:///I:...\001_Applikationen\007_Launcher\Launcher\bin\Debug\Launcher.exe" oder eine Abhängigkeit davon wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515)

In der InnerException steht ein Hinweis, dass er nicht von einer Netzwerkadresse laden kann. Daraufhin habe ich gemacht, was da steht und das war in der Konfigurationsdatei folgendes einfügen:


<runtime>
    <loadFromRemoteSources enabled="true"/>
  </runtime>

Gemacht, getan, hat aber leider nichts gebracht. Nach wie vor derselbe Fehler 🙁 Auch wenn ich das nicht vom Netzlaufwerk starte sondern lokal, dann kommt der Fehler auch. Was ist da nur los? Kann mir das echt nicht erklären. In der VisualStudio-Config-Datei deven*.config oder so habe ich bereits vor Tagen ebenfalls diesen Schalter hinzugefügt, weil es sonst nicht möglich ist ohne Fehlermeldung Visual-Studio-Projekte auf dem Netzlaufwerk zu bearbeiten und zu debuggen.

Alles recht komisch, hat da jmd ein Tipp? =)

PS: Hab die Pfade von den Variablen, die an die Klasse AppDomainSetup gehen natürlich schon mehrmals überprüft, die stimmen!

F
10.010 Beiträge seit 2004
vor 12 Jahren

Trotzdem stellt sich hier die Frage, warum kein ClickOnce?
Die dateien stehen auch nur in nem Netzwerkverzeichnis, installation ohne Adminrechte lokal und bei jedem start wird ggf ein Update gemacht.

S
sharpType Themenstarter:in
228 Beiträge seit 2009
vor 12 Jahren

Hallo,

also ich hab mir das schon gedacht mit Clickonce.

Habe das gerade mal ausgiebig getestet und es war leider nicht möglich - trotz Deaktivierung der Überprüfung auf erforderlichen Komponenten - ein Setup auf verschiedenen Rechnern zu installieren. Teilweise kam leider die Meldung, dass Adminrechte erforderlich sind. Tjo, also kommt Clickonce nicht in Frage. Was positiv ist: Der Updatemechanismus, wenn es installiert werden konnte und die Eigenschaft, dass in der Verknüpfung auf dem Desktop der Zielpfad nicht ersichtlich ist.

Allerdings habe ich hier das Problem, dass ich in der AssemblyInfo-Datei die Version händisch hochzähle zb. "1.0.*" und ich dann - im Fall von Clickonce - noch eine weitere Publikationsversion manuell definieren muss (Das automatische Auslesen der Publikationsversion und Anzeigen im Hauptprogramm a la AssemblyVersion) hat leider nicht funktioniert. So müsste ich immer ein weiteres Feld mit dem String in der Datei "AssemblyInfo" synchron halten.

Da war ich mit meinem eigenen Launcher schon besser bedient.

PS: Das mit der Schattenkopie klappt leider immernoch nicht (s. o.) 🙁

16.834 Beiträge seit 2008
vor 12 Jahren

Hallo,

ein Mozilla-Entwickler hat sich mit dem Thema ebenfalls beschäftigt Updating Firefox in the Background