Domanda

In Windows Server 2003, come posso verificare se il mio programma è in esecuzione nella console locale (" sullo schermo della macchina server ") anziché nella sessione remota?

Sto usando Delphi Win32, quindi qualsiasi metodo basato su API Windows dovrebbe funzionare ..

È stato utile?

Soluzione

Il numero di sessione non te lo direbbe?

ProcessIdToSessionId (GetCurrentProcessId (), & amp; dwSessionNum)

Dovresti controllare anche la versione del sistema operativo, usando GetVersionEx: per tutto fino a XP / Server 2003 la sessione 0 è locale (servizio o console interattiva), qualsiasi cosa superiore è virtuale. Per Vista / 2008 le sessioni 0 e 1 sono entrambe locali (0 è servizio, 1 è console), tutto il resto è virtuale.

Suppongo che le tue unità Delphi dichiarerebbero il numero di sessione come var, quindi non avresti bisogno della e commerciale.

Altri suggerimenti

WTSGetActiveConsoleSessionId () dovrebbe restituire il ID della sessione collegata alla console. È quindi possibile confrontare quell'ID sessione con l'ID sessione corrente dell'applicazione per determinare se si sta eseguendo o meno sulla console. Vista (non sono sicuro di Windows Server 2008) non fornisce necessariamente alla sessione della console l'ID 1 (Cambio rapido utente, nessuno?).

Per me, ProcessIdToSessionId ha restituito 0 sia quando eseguito direttamente sulla console fisica sia quando è stato effettuato l'accesso alla sessione amministrativa (mstsc / admin).

Tuttavia, quando accedi tramite RDP, Windows (XP Pro in questo caso) crea una nuova sessione che mostra sulla console fisica che ha appena il "questo computer è bloccato". display. WTSGetActiveConsoleSessionId restituisce l'id di sessione per quella seconda sessione che nel mio caso era 2.

Quindi, anche se l'app è in esecuzione sulla console, ora ci sono due sessioni della console e l'app non è in esecuzione su quella attiva. Nel mio codice, invece, confronto l'id di sessione con 0.

Brian ha ragione, da allora ho riscontrato Vista che riportava un ID sessione di 2 per una console interattiva, nonostante il Cambio rapido utente non fosse in uso. Certo, questo potrebbe essere solo un bug :-)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top