Pregunta

En Windows Server 2003, ¿cómo puedo verificar si mi programa se ejecuta en la consola local (" en la pantalla de la máquina del servidor ") en lugar de la sesión remota?

Estoy usando Delphi Win32, por lo que cualquier método basado en la API de Windows debería funcionar ...

¿Fue útil?

Solución

¿No te diría esto el número de sesión?

ProcessIdToSessionId (GetCurrentProcessId (), & amp; dwSessionNum)

También tendría que verificar la versión del sistema operativo, utilizando GetVersionEx: para todo, hasta la sesión 0 de XP / Server 2003 es local (servicio o consola interactiva), cualquier cosa superior es virtual. Para Vista / 2008, las sesiones 0 y 1 son locales (0 es servicio, 1 es consola), todo lo demás es virtual.

Supongo que tus unidades Delphi declararían el número de sesión como var, por lo que no necesitarías el símbolo "."

Otros consejos

WTSGetActiveConsoleSessionId () debe devolver el ID de la sesión adjunta a la consola. Luego, puede comparar el ID de sesión con el ID de sesión actual de su aplicación para determinar si está ejecutando en la consola o no. Vista (no estoy seguro acerca de Windows Server 2008) no necesariamente le da a la sesión de la consola el ID de 1 (Cambio rápido de usuario, ¿alguien?).

Para mí, ProcessIdToSessionId devolvió 0 tanto cuando se ejecutó directamente en la consola física como cuando inició sesión en la sesión administrativa (mstsc / admin).

Sin embargo, cuando inicia sesión a través de RDP, Windows (XP Pro en este caso) crea una nueva sesión que se muestra en la consola física que solo tiene el botón " esta computadora está bloqueada " monitor. WTSGetActiveConsoleSessionId devuelve el ID de sesión para esa segunda sesión, que en mi caso fue 2.

Entonces, aunque su aplicación se ejecuta en la consola, ahora hay dos sesiones de consola y su aplicación no se ejecuta en la activa. En mi código comparo el ID de sesión con 0 en su lugar.

Brian está en lo cierto, desde entonces me he encontrado con Vista que reporta un ID de sesión de 2 para una consola interactiva, a pesar del hecho de que Fast User Switching no estaba en uso. Por supuesto, esto puede ser simplemente un error :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top