Domanda

Ho un breve programma che viene utilizzato esclusivamente con una connessione desktop remoto che è stato impostato per funzionare solo quel programma e non consentire a qualsiasi altro accesso nella macchina remota. In precedenza, il programma appena uscito e lasciare che la connessione terminare, ma è stato molto lento, così ho scritto il seguente codice per terminare la sessione remota quando il programma è fatto in esecuzione.

    [DllImport("wtsapi32.dll", SetLastError = true)]
    static extern bool WTSLogoffSession(IntPtr hServer, int SessionId, bool bWait);

    private IntPtr WTS_CURRENT_SERVER_HANDLE;
    private const int WTS_CURRENT_SESSION = -1;

    ...

    private void HardTerminalExit()
    {
        WTSLogoffSession(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, false);
    }

Questo funziona bene quando questo programma è nel suo ambiente di produzione, utilizzato dalle persone che sono in Remoting utilizza un file di connessione RDP specifica. Il collegamento esce dopo che il programma viene eseguito. Tuttavia, durante il test e il debug di questo programma, il mio computer si riavvia dopo ogni corsa.

Sto cercando un buon modo per distinguere tra questi casi. Devo creare una sorta di script di debug che telecomandi in ed esegue il programma in remoto? O c'è qualche modo per rilevare a livello di codice se il programma è in esecuzione in modalità debug e basta disabilitare la procedura di uscita in quel caso?

È stato utile?

Soluzione

È possibile utilizzare le direttive pragma:

private void HardTerminalExit()
{
  #if DEBUG
  // Soft Exit
  #else
  // Hard Exit
  #end if
}

Credo che sia meglio la pratica di utilizzare la più recente ConditionalAttribute, ma non credo che si può negare che, così avresti bisogno di impostare una variabile d'ambiente per "RELEASE" te stesso:

[Conditional ( "RELEASE" )]
private void HardTerminalExit()
{
  // Hard Exit, only called when "RELEASE" is defined.
}

Questo dirà al compilatore di chiamare solo questo metodo quando la variabile d'ambiente "RELEASE" viene dichiarato da qualche parte - questo può dichiarata in fase di compilazione (simboli di compilazione condizionale nel riquadro immobiliare Costruire) o come parte della shell del sistema operativo, vedere ConditionalAttribute per più inforamation su questo.

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