Wenn man auf einem (Windows 2008) Server eine RDP-Sitzung trennt (nicht beendet, damit die Server-Applikation weiterläuft) und später wieder öffnet, wird in 99% der Fälle die bereits laufende Session wieder angezeigt. Gut so. Aber nach einem mir bisher nicht nachvollziehbaren Muster kommt es hin und wieder vor, dass eine weitere Session gestartet wird und damit dummerweise auch die (per Autostart verküpfte) Serveranwendung. Die läuft dann zweimal, was die Clients in hohem Maße verunsichert und auch fehlerhafte Einträge in der lokalen SQLite-Datenbank verursacht. Wie kann man sowas verhindern? Die Benutzung von Mutex-Mechanismen bringt leider Nichts, die wirkt nur innerhalb der gleichen Session. (Es geht übrigens immer um den gleichen Benutzer)
Ganz brutal? Lass den Server einen lokalen Port öffnen, denn es gilt: Es kann nur einen geben, musst ja nix empfangen/senden ;)
Noch brutaler: Eine echte Serveranwendung nehmen, die als Dienst läuft und nicht auf einen angemeldeten Benutzer angewiesen ist. Wenn es die für dieses Programm nicht gibt, wechseln, oderwenigstens auf die Konsole anmelden ( mit /console oder /admin je nach Version des RDP Client) denn an der Konsole kann immer nur einer angemeldet sein. Was wenn der Server aus irgendeinem Grund nachts neu startet. (z.B. von der Notstrom) Serverdienste sollen nach einem Neustart laufen, auch ohne das jemand angemeldet ist. Chris
Frank Esselbach schrieb: > Wie kann man sowas verhindern? Mit der Terminalserveradministration lässt sich konfigurieren, daß ein Benutzer nicht mehrere simultane Sitzungen betreiben darf. Wo das jetzt genau beim W2K8 versteckt wird, kann ich Dir im Moment nicht sagen, bei W2K3 findest Du es unter Verwaltung->Terminaldienstekonfiguration->Servereinstellungen, "Nur eine Sitzung pro Benutzer zulassen". Das müsste Dein Problem lösen helfen.
Die Kommunikation zwischen Server und Clients läuft über (quittierte) UDP-Messages - so gesehen gibt es keinen dauernd geöffneten Port. Idee: Ich werde dann wohl zusätzlich einen lauschenden TCP-Port einbauen. Bei Programmstart werde ich versuchen, genau auf diesen Port einen Connect zu machen. Gelingt dieser, läuft schon ein Server und ich beende das Programm wieder. Gelingt er nicht, kann der Start der Aplikation fortgestzt werden ... Passt das?
Rufus Τ. Firefly schrieb: > Mit der Terminalserveradministration lässt sich konfigurieren, daß ein > Benutzer nicht mehrere simultane Sitzungen betreiben darf. Wo das jetzt Guter Tip, das habe ich erstmal so gemacht. Nun muss ich nur noch verhindern, dass ein anderer das Programm manuell ein zweites mal startet. Nachfrage: Haben die Netzwerkadapter einer physischen Maschine eigentlich in allen Sessions die gleiche IP-Adresse? Wohl eher nicht ... gibt es dfür eine spezielle Loopback-Adresse? Geht 127.0.0.1? Fragen über Fragen ...
Frank Esselbach schrieb: > Die Benutzung von Mutex-Mechanismen bringt leider Nichts, die wirkt nur > innerhalb der gleichen Session. Stimmt nicht! http://msdn.microsoft.com/de-de/library/system.threading.mutex.aspx "Auf einem Server, der die Terminaldienste ausführt, kann ein benannter Systemmutex eine von zwei Sichtbarkeitsebenen aufweisen. Wenn der Name mit dem Präfix "Global\" beginnt, ist der Mutex in allen Terminalserversitzungen sichtbar. Wenn der Name mit dem Präfix "Local\" beginnt, ist der Mutex nur in der Terminalserversitzung sichtbar, in der er erstellt wurde. In diesem Fall kann ein separater Mutex mit demselben Namen in jeder Terminalserversitzung auf dem Server vorhanden sein. Wenn Sie beim Erstellen eines benannten Mutex kein Präfix angeben, wird das Präfix "Local\" verwendet. Innerhalb einer Terminalserversitzung stellen zwei Mutexe, deren Namen sich lediglich im Präfix unterscheiden, zwei separate Mutexe dar. Beide Mutexe sind für alle Prozesse in der Terminalserversitzung sichtbar. Das heißt, die Präfixnamen "Global\" und "Local\" beschreiben den Gültigkeitsbereich des Mutexnamens relativ zu Terminalserversitzungen und nicht relativ zu Prozessen." fchk
Frank Esselbach schrieb: > Nun muss ich nur noch verhindern, dass ein anderer das Programm > manuell ein zweites mal startet. > Die Benutzung von Mutex-Mechanismen bringt leider Nichts, die wirkt nur > innerhalb der gleichen Session. Wenn der Name des Mutex mit "Global\" anfängt, sollte es sitzungsübergreifend sein. Alternativ kannst Du Dir wie von Läubi vorgeschlagen mit einem Socket ein Mutex selberbasteln.
Christoph Hoell schrieb: > Noch brutaler: Eine echte Serveranwendung nehmen, die als Dienst läuft > und nicht auf einen angemeldeten Benutzer angewiesen ist. Das ist die einzig sinnvolle Lösung. Alles andere hat Bastler-Status. Ich bekomme jedesmal einen Mega-Hals, wenn ich sowas installieren muß. Brrr.. Frank Esselbach schrieb: > Nachfrage: Haben die Netzwerkadapter einer physischen Maschine > eigentlich in allen Sessions die gleiche IP-Adresse? Wohl eher nicht ... Warum sollte sich die IP ändern? Natürlich bleibt die gleich.
> Warum sollte sich die IP ändern? Natürlich bleibt die gleich.
Wenn auf einer physischen Maschine mehrere Sessions parallel laufen,
dann können die ja wohl kaum die gleiche IP-Adresse haben - oder wie
können die einzelnen Nutzer dann z.B. unabhängig surfen oder Daten
schreiben/lesen?
Wieso denn nicht? Wozu gibt es Ports? Weshalb können auf einem Rechner mit nur einer einzigen IP mehrere Anwendungen gleichzeitig Netzwerkverkehr haben? Mach ein paar Sessions auf und frag in jeder per ipconfig die IP-Adresse ab.
Icke ®. schrieb: > Wieso denn nicht? Wozu gibt es Ports? Weshalb können auf einem Rechner > mit nur einer einzigen IP mehrere Anwendungen gleichzeitig > Netzwerkverkehr haben? Mach ein paar Sessions auf und frag in jeder per > ipconfig die IP-Adresse ab. DAS ist klar - aber du hast mich missverstanden. Es geht um die gleichen Anwendungen (z.B. Browser) auf einer physischen Maschine, aber in verschiedenen (Benutzer-) Sessions. Die können ja in der Paraxis auch untereinander kommunizieren, was mit der gleichen IP wohl kaum funktioniern dürfte. Zusatzfrage: Welche Ordner sind denn für alle Benutzer auf einem Windows-System physikalisch gleich? Ich würde mal checken, ob sich das mit einer Datei regeln lässt, in der Datum und Uhrzeit regelmäßig auktualisiert werden. Das ist notwendig, um die Gültigkeit der Datei zu bestimmen, falls die Applikation mal abstürzt. Existiert die Datei UND (!) sind Datum/Uhrzeit aktuell (z.B. höchstens 30 Sekunden alt), läuft schon eine Instanz ...
Frank Esselbach schrieb: > DAS ist klar - aber du hast mich missverstanden. Es geht um die gleichen > Anwendungen (z.B. Browser) auf einer physischen Maschine, aber in > verschiedenen (Benutzer-) Sessions. Das ist schon klar, und das hat "icke" auch richtig verstanden. > Die können ja in der Paraxis auch > untereinander kommunizieren, Zwei Browser? Wohl nicht. Browser sind Socket-Clients, die kommunizieren mit korrespondierenden Socket-Servern (wie z.B. Webserver), aber nicht miteinander. > was mit der gleichen IP wohl kaum funktioniern dürfte. Doch, ist so. Ob zwei Browser in einer Sitzung oder in getrennten Sitzungen laufen macht exakt keinen Unterschied aus. Die IP-Adresse gehört dem Rechner, nicht den darauf laufenden Sitzungen. Wenn Du versuchst, zwei Socket-Server auf dem gleichen Rechner zu starten, die die gleiche Portnummer verwenden, dann gibt es eine Fehlermeldung, ganz unabhängig davon, ob die beiden Server in der gleichen oder in unterschiedlichen Sitzungen laufen. Und das ist der "Trick", wie Du Dir ein Mutex basteln könntest, indem Du eben einen Port aufmachst und auf eingehende Verbindungen wartest, ganz so, wie es z.B. ein Webserver macht. Das kann mit einer gegebenen Portnummer nur ein Programm auf dem Rechner, ganz unabhängig davon, wieviele Sitzungen gerade aktiv sind. > Zusatzfrage: Welche Ordner sind denn für alle Benutzer auf einem > Windows-System physikalisch gleich? Windows fängt Zugriffe auf etliche Verzeichnisse ab, wenn die sie durchführenden Anwendungen nicht im Exe-Header ein Flag gesetzt haben, das sie als "Terminalserverfähig" kennzeichnet: http://msdn.microsoft.com/en-us/library/01cfys9z%28v=vs.80%29.aspx
Frank Esselbach schrieb: > DAS ist klar - aber du hast mich missverstanden. Es geht um die gleichen > Anwendungen (z.B. Browser) auf einer physischen Maschine, aber in > verschiedenen (Benutzer-) Sessions. Die können ja in der Paraxis auch > untereinander kommunizieren, was mit der gleichen IP wohl kaum > funktioniern dürfte. Ich denke, du hat da was mißverstanden. Normale Anwendungen bauen Verbindungen abgehend ZU einem bestimmten Zielport auf. Ein Browser bspw. zu einem entfernten Server auf Zielport 80. Unterschiedlich muß nur der lokale Port sein, damit die Antworten der richtigen Anwendung zugeordnet werden. Du kannst ohne weiteres mehrere Browser öffnen und in allen die selbe Webseite aufrufen. Funktioniert problemlos. Mit den Sessions auf einem Terminalserver verhält es sich ähnlich. Es wäre was anderes, wenn in den Sessions Serveranwendungen gestartet werden, die auf einem Port lauschen. Also wenn z.B. in jeder Session ein Webserver läuft. Die müßten dann auf verschiedenen Ports arbeiten (bspw. 80, 81, 82, usw.). Die physische Netzwerkschnittstelle benötigt aber trotzdem nur eine IP-Adresse. Ich habe bestimmt zwei Dutzend Terminalserver da draußen und ich schwöre, die haben alle nur eine einzige IP. Es wäre netzwerktechnisch auch sehr unpraktikabel, wenn jede Session eine eigene IP bräuchte, denn die Range in einem C-Netz wäre dann ratzfatz aufgebraucht. > Zusatzfrage: Welche Ordner sind denn für alle Benutzer auf einem > Windows-System physikalisch gleich? Dafür eignet sich am besten der Ordner "ProgramData", dessen Pfad in der Variable %ALLUSERSPROFILE% hinterlegt ist. EDIT: Rufus war ein wenig schneller.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.