Forum: PC Hard- und Software Probleme mit Remote-Desktop


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ganz brutal? Lass den Server einen lokalen Port öffnen, denn es gilt: Es 
kann nur einen geben, musst ja nix empfangen/senden ;)

von Christoph H. (webturtle)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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 ...

von Frank K. (fchk)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Icke ®. (49636b65)


Lesenswert?

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.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

> 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?

von Icke ®. (49636b65)


Lesenswert?

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.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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 ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Icke ®. (49636b65)


Lesenswert?

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
Noch kein Account? Hier anmelden.