Pregunta

Tengo un pequeño programa que se utiliza exclusivamente con una conexión de escritorio remoto que se ha ajustado a solamente ejecutar ese programa y no permitir que cualquier otro acceso en la máquina remota. Anteriormente, el programa acaba de salir y dejar que la conexión de terminar, pero era muy lento, por lo que escribió el código siguiente para terminar la sesión remota cuando el programa ha terminado de correr.

    [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);
    }

Esto funciona bien cuando este programa se encuentra en su entorno de producción, utilizado por las personas que están en interacción remota con un archivo de conexión RDP específica. La conexión sale después de que el programa se ejecuta. Sin embargo, al probar y depurar este programa, mi equipo se reinicia después de cada carrera.

Estoy buscando una buena manera de distinguir entre estos casos. Debería establecer algún tipo de secuencia de comandos de depuración que mandos a distancia en el programa y se ejecuta de forma remota? ¿O hay alguna manera de detectar mediante programación si el programa se está ejecutando en modo de depuración y simplemente desactivar el procedimiento de salida en ese caso?

¿Fue útil?

Solución

Puede utilizar las directivas pragma:

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

Creo que es mejor la práctica de utilizar los nuevos ConditionalAttribute, pero no creo que se puede negar que, por lo que había necesidad de establecer una variable de entorno para "LIBERACIÓN" a sí mismo:

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

Esto le dirá al compilador que sólo se llame a este método cuando la variable de entorno "LIBERACIÓN" se declara en alguna parte - esto puede declarada en durante la compilación (símbolos de compilación condicional en el panel característica de la estructura) o como parte de la shell del sistema operativo, ver ConditionalAttribute para más inforamation en esto.

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