2008-10-01 5 views
22

Gibt es eine Möglichkeit mein Programm festzustellen, wenn es auf einem Remotedesktop (Terminaldienste) ausgeführt wird?Ermitteln Sie, ob ein Programm auf einem Remotedesktop ausgeführt wird

Ich möchte ein "Inaktivitätszeitlimit" für das Programm aktivieren, wenn es in einer Remotedesktopsitzung ausgeführt wird. Da Benutzer berüchtigt dafür sind, dass Remotedesktopsitzungen geöffnet bleiben, möchte ich, dass mein Programm nach einer bestimmten Inaktivitätszeit beendet wird. Aber ich möchte nicht, dass das Inaktivitätszeitlimit für Nicht-RD-Benutzer aktiviert ist.

Antwort

10

Hier ist der C# -Code verwaltet i verwenden:

/// <summary> 
/// Indicates if we're running in a remote desktop session. 
/// If we are, then you MUST disable animations and double buffering i.e. Pay your taxes! 
/// 
/// </summary> 
/// <returns></returns> 
public static Boolean IsRemoteSession 
{ 
    //This is just a friendly wrapper around the built-in way 
    get 
    { 
     return System.Windows.Forms.SystemInformation.TerminalServerSession; 
    } 
} 
5

folgende Arbeiten, wenn Sie über Ihre Anwendung wissen möchten, welche in der Sitzung ausgeführt wird :

BOOL IsRemoteSession(void) 
{ 
    return GetSystemMetrics(SM_REMOTESESSION); 
} 

Aber nicht allgemein für irgendeine Prozess Identifikation.

Wenn Sie über einen beliebigen Prozess wissen möchten, der in einer beliebigen Sitzung ausgeführt werden kann, können Sie die folgende Methode verwenden.

Sie können die Prozess-ID zuerst in eine Sitzungs-ID konvertieren, indem Sie ProcessIdToSessionId aufrufen. Sobald Sie die Sitzungs-ID haben, können Sie sie verwenden: WTSQuerySessionInformation. Sie können WTSInfoClass als Wert WTSIsRemoteSession angeben und erhalten Sie die Informationen darüber, ob diese Anwendung eine Remote-Desktop-Verbindung ist oder nicht.

BOOL IsRemoteSession(DWORD sessionID) 
{ 
    //In case WTSIsRemoteSession is not defined for you it is value 29 
    return WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, sessionID, WTSIsRemoteSession, NULL, NULL); 
} 
+0

Welche Situationen können dazu führen, dass sich ein Prozess in einer anderen Sitzung befindet? Ist dies, wenn ich nach Diensten oder Verarbeitung unter anderen angemeldeten Benutzern frage? –

+0

Wenn Sie eine neue Anmeldung entweder vom lokalen Computer oder über RDP ohne die Option/console ausführen, wird eine neue Sitzung erstellt. Wenn eine neue Sitzung erstellt wird, wird ein erstellter Prozess standardmäßig in dieser Sitzung gestartet. Sie können Sitzungen auch dann ausrichten, wenn Sie einen Prozess über Win32 API CreateProcessAsUser erstellen. –