Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

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

Moderationshinweis von herbivore (02.11.2011 - 11:07:13):

Abgeteilt von Auto Update Funktion integrieren

rock4k
myCSharp.de - Member



Dabei seit:
Beiträge: 39

Themenstarter:

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

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rock4k am .
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3783
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Hallo Rock,
Zitat
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
private Nachricht | Beiträge des Benutzers
rock4k
myCSharp.de - Member



Dabei seit:
Beiträge: 39

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3783
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
thomas.at
myCSharp.de - Member



Dabei seit:
Beiträge: 102
Herkunft: Österreich / Wien

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers