![]() |
Remote Terminal Session erkennen
Ich verwende folgenden Code, um festzustellen, ob mein Programm auf einem Terminal Server läuft:
Delphi-Quellcode:
Leider kann ich so nicht unterscheiden, ob ich auf einen Terminal Server arbeite
function IsRemoteTerminalServerSession:Boolean;
const SM_REMOTESESSION = $1000; // in Windows.pas nicht enthalten begin result := GetSystemMetrics( SM_REMOTESESSION ) <> 0; end; oder ob ich auf einer normalen Arbeitsstation über eine Remote Session bin. Was könnte man tun, um das herauszufinden? |
AW: Remote Terminal Session erkennen
Also erstmal:
Seit XP läuft immer ein Terminal Server. D.h. du kannst nur unterscheiden, ob deine Anwendung ferngesteuert wird oder nicht...eben RDP. Also ist SM_REMOTESESSION schon richtig, um dies festzustellen. Oder willst du wissen, ob du auf einem Serversystem läufst oder ob der TS Dienst läuft? BTW: Du kannst erkennen, ob dein Programm in der Konsolensitzung (console session) läuft, indem du die Prozesssitzungskennung mit dem Wert von WTSGetActiveConsoleSessionId vergleichst. Wenn gleich, dann ist wird deine Anwendung von der lokalen Maus-, Tastatur gesteuert. |
AW: Remote Terminal Session erkennen
Deine Frage ist leider etwas unverständlich formuliert. Du kannst folgendes nicht: Per RDP von einem "Client"-System auf das selbe "Client"-System eine Verbindung aufbauen. Aber: Du kannst, wenn du einen TS-Server(dienst) hast, gerne an der lokalen Konsole eine RDP-Verbindung zu localhost aufbauen (in den Einstellungen schauen, Windows verbietet das bei default).
Bernhard |
AW: Remote Terminal Session erkennen
Abfrage des Betriebssystems?
Es gibt aber auch alternative Terminalserver, die aus (fast) jedem Desktop BS einen echten Terminalserver machen. |
AW: Remote Terminal Session erkennen
Zitat:
Es gibt folgende Rechner: A - Windows Server 2003/Terminal Server, nach dem Neusprech von Microsoft heisst das nicht mehr Terminal Server sondern Remote Desktop Session Host. B - Windows 7 C - Windows XP Mein Programm muss je nach dem ob es auf einem Terminal Server oder auf einer Workstation läuft unterschiedlich reagieren (andere Pfade usw). Szenario 1: Anwendung läuft ganz normal auf Rechner B Szenario 2: Rechner C stellt eine RDP-Verbindung zu Rechner A her und startet dort meine Anwendung. Szenario 3: Benutzer von Rechner B braucht Hilfe. Deshalb verbindet sich Rechner C mit B und startet meine Anwendung. Und jetzt denkt meine Anwendung sie würde auf einem Terminal Server laufen und reagiert falsch weil sie ja in Wirklichkeit auf einer Arbeitstation läuft. Ich möchte also Szenario 2 von 3 unterscheiden können. Ich könnte nun meine Funktion zur Erkennung der Betriebsart erweitern:
Delphi-Quellcode:
Ich möchte die Funktion IsServerOS gerne vermeiden weil sie aufwändig (bei Delphi5 fehlen die nötigen Strukturen) und nicht sicher ist.
function IsServerOS:boolean;
begin // rauszufinden ob wir auf einem Server OS laufen // GetVersionEx Result := ...; end; function IsRemoteTerminalServerSession:Boolean; const SM_REMOTESESSION = $1000; // in Windows.pas nicht enthalten begin result := (GetSystemMetrics( SM_REMOTESESSION ) <> 0) and IsServerOS; end; |
AW: Remote Terminal Session erkennen
:gruebel:
Der Anwendung im Setup die entsprechenden Pfade übergeben ... dann ist es ja egal was wie wo läuft. |
AW: Remote Terminal Session erkennen
Zitat:
|
AW: Remote Terminal Session erkennen
Was genau machst du, dass du unterscheiden musst?
|
AW: Remote Terminal Session erkennen
Vor allem das mit den Pfaden ist doch kein Problem (eigentlich), wenn man es richtig macht, dann ist es völlig egal, worauf das Programm gerade läuft
|
AW: Remote Terminal Session erkennen
Hi,
vielleicht wäre IsServerOS doch nicht so schlecht, nur halt z.B. aus der ntdll...RtlGetNtProductType Kann man ja mal probieren (siehe GetNTType aus IdGlobalProtocols.Pas) Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz