Usando um modo de depuração para um programa que é executado em um ambiente de trabalho remoto

StackOverflow https://stackoverflow.com/questions/371248

Pergunta

Eu tenho um pequeno programa que é usado exclusivamente com uma conexão de desktop remoto que tem sido definido somente para executar o programa, e não permitir que qualquer outro acesso para a máquina remota. Anteriormente, o programa só saiu e deixou a ligação terminar, mas foi muito lento, então eu escrevi o seguinte código para terminar a sessão remota quando o programa é feito em execução.

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

Esta multa funciona quando este programa está em seu ambiente de produção, usado pelas pessoas que são comunicação remota em usar um arquivo de conexão RDP específico. As saídas de conexão após o programa é executado. No entanto, ao testar e depurar esse programa, o computador for reiniciado após cada corrida.

Eu estou procurando uma boa maneira de distinguir entre estes casos. Devo configurar algum tipo de script de depuração que controles remotos em e executa o programa remotamente? Ou há alguma maneira de detectar programaticamente se o programa está sendo executado no modo de depuração e apenas desabilitar o procedimento de saída nesse caso?

Foi útil?

Solução

Você pode usar as directivas Pragma:

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

Eu acredito que é melhor prática para usar o mais recente ConditionalAttribute, mas eu não acho que você pode negar isso, então você precisa definir uma variável de ambiente para "Libere" a si mesmo:

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

Isto irá dizer ao compilador apenas chamar esse método quando o "release" variável de ambiente é declarado em algum lugar - isso pode declarado em durante a compilação (símbolos de compilação condicional no painel de propriedade da compilação) ou como parte do shell do sistema operacional, consulte ConditionalAttribute para mais inforamation sobre isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top