Question

Sous Windows Server 2003, comment puis-je vérifier si mon programme est exécuté dans la console locale ("sur l'écran de la machine serveur") au lieu d'une session à distance?

J'utilise Delphi Win32, donc toute méthode basée sur une API Windows devrait fonctionner.

Était-ce utile?

La solution

Le numéro de session ne vous l'indiquerait-il pas?

ProcessIdToSessionId (GetCurrentProcessId (), & amp; dwSessionNum)

Il faudrait également vérifier la version du système d'exploitation à l'aide de GetVersionEx: pour tout ce qui va jusqu'à XP / Server 2003, la session 0 est locale (service ou console interactive), tout ce qui est supérieur est virtuel. Pour Vista / 2008, les sessions 0 et 1 sont toutes deux locales (0 correspond au service, 1 à la console), tout le reste est virtuel.

Je suppose que vos unités Delphi déclareraient le numéro de session sous la forme var, vous n’auriez donc pas besoin de la perluète.

Autres conseils

WTSGetActiveConsoleSessionId () doit renvoyer le ID de la session attachée à la console. Vous pouvez ensuite comparer cet identifiant de session avec l'identifiant de session actuel de votre application pour déterminer si vous utilisez la console ou non. Vista (pas sûr de Windows Server 2008) ne donne pas nécessairement l'ID de 1 à la session de console (Changement rapide d'utilisateur, ça vous tente?).

Pour moi, ProcessIdToSessionId a renvoyé 0 à la fois lorsqu'il est exécuté directement sur la console physique et lorsqu'il est connecté à la session administrative (mstsc / admin).

Toutefois, lorsque vous vous connectez via RDP, Windows (XP Pro dans ce cas) crée une nouvelle session qui s'affiche sur la console physique sur laquelle le "cet ordinateur est verrouillé". afficher. WTSGetActiveConsoleSessionId renvoie l'identifiant de session pour cette deuxième session, qui dans mon cas était 2.

Ainsi, même si votre application est exécutée sur la console, il existe maintenant deux sessions de console et votre application ne s'exécute pas sur la session active. Dans mon code, je compare l'identifiant de session à 0.

Brian a raison, je rencontre depuis Vista un identifiant de session de 2 pour une console interactive, alors que le changement rapide d’utilisateur n’était pas utilisé. Bien sûr, il s’agit peut-être simplement d’un bug: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top