Использование режима отладки для программы, запущенной на удаленном рабочем столе

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

Вопрос

У меня есть короткая программа, которая используется исключительно с подключением к удаленному рабочему столу, настроенным только на запуск этой программы и не разрешающим никакого другого доступа к удаленному компьютеру.Ранее программа просто завершала работу и позволяла соединению завершаться, но это было очень медленно, поэтому я написал следующий код для завершения удаленного сеанса после завершения работы программы.

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

Это прекрасно работает, когда эта программа находится в рабочей среде, используемой людьми, которые работают удаленно, используя определенный файл подключения RDP.Соединение завершается после запуска программы.Однако при тестировании и отладке этой программы мой компьютер перезагружается после каждого запуска.

Я ищу хороший способ провести различие между этими случаями.Должен ли я настроить какой-то отладочный скрипт, который удаленно подключается и запускает программу?Или есть какой-то способ программно определить, запущена ли программа в режиме отладки, и просто отключить процедуру выхода в этом случае?

Это было полезно?

Решение

Вы можете использовать директивы pragma:

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

Я считаю, что лучше использовать более новый ConditionalAttribute , но я не думаю, что вы можете отрицать это, поэтому вам нужно будет самостоятельно установить переменную среды для "RELEASE":

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

Это подскажет компилятору вызывать этот метод только тогда, когда где-то объявлена переменная среды "RELEASE" - это может быть объявлено во время компиляции (Условные обозначения компиляции на панели свойств сборки) или как часть оболочки операционной системы, см. Условный атрибут для получения дополнительной информации по этому поводу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top