Использование режима отладки для программы, запущенной на удаленном рабочем столе
-
21-08-2019 - |
Вопрос
У меня есть короткая программа, которая используется исключительно с подключением к удаленному рабочему столу, настроенным только на запуск этой программы и не разрешающим никакого другого доступа к удаленному компьютеру.Ранее программа просто завершала работу и позволяла соединению завершаться, но это было очень медленно, поэтому я написал следующий код для завершения удаленного сеанса после завершения работы программы.
[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" - это может быть объявлено во время компиляции (Условные обозначения компиляции на панели свойств сборки) или как часть оболочки операционной системы, см. Условный атрибут для получения дополнительной информации по этому поводу.