원격 데스크탑에서 실행되는 프로그램에 디버그 모드 사용
-
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
}
나는 새로운 조건부 배치를 사용하는 것이 더 나은 연습이라고 생각하지만, 당신이 그것을 부정 할 수 있다고 생각하지 않으므로, 당신은 "릴리스"에 대한 환경 변수를 설정해야합니다.
[Conditional ( "RELEASE" )]
private void HardTerminalExit()
{
// Hard Exit, only called when "RELEASE" is defined.
}
이것은 컴파일러가 "릴리스"환경 변수가 어딘가에 선언 될 때만이 메소드를 호출하도록 지시합니다. 이는 컴파일 중 (빌드 속성 창의 조건부 컴파일 기호) 또는 운영 체제 쉘의 일부로 선언 할 수 있습니다. 조건부 정보 이것에 대한 더 많은 정보를 위해.