Laden...

Wie update ich meine Anwendung auf einem Terminal Server, während die Anwender damit arbeiten?

Erstellt von rock4k vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.600 Views
Hinweis von herbivore vor 12 Jahren

Abgeteilt von Auto Update Funktion integrieren

R
rock4k Themenstarter:in
39 Beiträge seit 2008
vor 12 Jahren
Wie update ich meine Anwendung auf einem Terminal Server, während die Anwender damit arbeiten?

Deployment auf Terminal Server

Hallo,

hin und wieder suche ich nach diesem Thema. Denn wir haben eine ähnliche Situation.

Die Frage ist doch eigentlich:
Wie update ich meine Anwendung auf einem Terminal Server, während die Anwender damit arbeiten?

Wir haben z.B. eine Clientanwendung, mit denen in der Firma durschschnittlich 30-40 Benutzer arbeiten. Da unser Betrieb 24h/7T arbeitet, gibt es theoretisch nie einen Zeitpunkt für den Tausch(Update) des Programmes. Selbst die programmeigene Ankündigung von Stunden vorher wird von den Anwender erfolgreich ignoriert, übersehen oder vergessen.

Bisher müssen immer alle offenen Bezüge zu den DLL's usw. entfernt werden, um diese austauschen zu können. Wir ziehen den Anwendern quasi die Füsse weg. ShadowCopy funktioniert nur sehr unzuverlässig (siehe meine anderen Beiträge).

Was für eine Lösung gäbe es hierfür? Also für ein Update der Anwendung während des Betriebes?

Meine Vorstellung wäre, dass die "neuen Dateien" deployed werden und die Nutzer im gerade laufenden Programm einen Hinweis bekommen. Nach Neustart der Applikation durch den Nutzer arbeitet er mit der neuen Version.
Mit einfachen FileCopies ist das nicht zu lösen (Win7 Berechtigungen uvm.).

Oder gibt es ganz andere Ansätze?

Ich recherchiere schon seit Monaten nach einer Lösung.

Vielen Dank und Grüße
Mario

P.S.: Kennt jemand eine von Microsoft vorgeschlagene Vorgehensweise?

3.825 Beiträge seit 2006
vor 12 Jahren

Hallo Rock,

Kennt jemand eine von Microsoft vorgeschlagene Vorgehensweise?

die kenne ich nicht, aber ich mache das so :


ren *.exe *.ex1
ren *.dll *.dl1
xcopy update\*.exe *.*
xcopy update\*.dll *.*

Nach Neustart arbeiten die Anwender dann mit der neuen Version.

Beachte dass die Anwender teilweise mit der alten und teilweise mit der neuen Version arbeiten (eine kurze Zeit lang).

Da ich die Programmversion sowohl in der Datenbank als auch im Sourcecode vorhalte kann ich allen Anwendern ein Info-Fenster anzeigen : "Bitte Programm neu starten".

Diese Update-Technik funktioniert leider nicht mehr wenn ein Windows 7 System das Programm auf einem Netzwerklaufwerk geöffnet hat.

Grüße Bernd

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

R
rock4k Themenstarter:in
39 Beiträge seit 2008
vor 12 Jahren

Danke für Deine Antwort.

Ich muss wohl noch ergänzen, dass wir genau diesen Fall haben. Es gibt zum einem die Nutzer der Terminal Server und dann haben wir aber noch eine ganze Menge Nutzer (bsp. Notebooks), die die Anwendung immer aktuell von einer Freigabe starten. Da sind die meisten Geräte mit Win7 ausgestattet.

Deswegen gibt es mit Win7 große Probleme bei den sogenannten Vertrauensstellungen. Habe da schon mit Batches bei Programmstart und allem möglichem experimentiert, ohne einen akzeptablen Erfolg.

Thema Vertrauensstellungen bei Win7:
Das verursacht einige Messageboxes der UAC und viel schlimmer: Bei den einem funktioniert es, beim anderen überhaupt nicht bzw. völlig wirkungslos.

Inzwischen bin ich soweit auch völlig andere Wege zu gehen und die Anwendung auch dementsprechend umzustellen bzw. auch die Architektur zu ändern. Aber mich würde interessieren ob es hierzu tatsächlich "offizielle" Lösungsansätze (Bsp. Microsoft) gibt.

G
538 Beiträge seit 2008
vor 12 Jahren

Ich würde tippen der "offizielle Ansatz" heißt "reboot for Software-Maintenance"

Wie dem auch sei - falls du zwei Server hast, die in einem Load-Balance Verbund stehen kannst du auch einen entfernen, dort updaten, dann den LoadBalancer auf den Upgedatetn umschalten und selbiges das Update auf dem anderen Server machen - das wäre wohl ne ganz saubere lösung.

Oder du gibst den usern in zukunft einen Link und installierst in verschiedene Verzeichnisse, dann musst du nur den Link ändern (was leider bei den Freigabe-Leuten schwer wird).

Schnelle und recht saubere Lösung per Skript:
Alle Verbindungen schließen (also TS-Sitzungen und SMB-Sitzungen), Software austauschen, Verbindungen wieder erlauben. Das ganze ankündigen und Nachts laufen lassen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

3.825 Beiträge seit 2006
vor 12 Jahren

Folgende Möglichkeiten sehe ich :

Für Terminal Server User und für User über Netzwerkfreigabe verschiedene Programmverzeichnisse anlegen.

Meldung an die Win 7 User "Programm verlassen" und nach dem Update "Programm kann wieder gestartet werden".

Grüße Bernd

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

T
111 Beiträge seit 2005
vor 12 Jahren

Hallo

ich habe auch ein Programm, das auf einem Netzlaufwerk liegt und von dort direkt oder über Citrix (WIN 2003 Server) aufgerufen wird. Ich habe dafür einen Loader geschreiben, der wie in Deinem Thread "ShadowCopyFiles einer AppDomain auf Win2003 oder Netzlaufwerk?" mit Shadow-Copy arbeitet. Allerdings habe ich den Pfad für den Cache auf "C:\Dokumente und Einstellungen_user_\Anwendungsdaten_Anwendungsname___cache gelegt. Dadurch ist nur das Bootprogramm gesperrt und ich kann im laufenden Betrieb alle DLLs überschreiben. Der User hat dann beim nächsten Start das aktuelle Programm.

Grüße
Thomas