문제

해당 프로그램 만 실행하고 원격 시스템에 다른 액세스를 허용하지 않도록 설정된 원격 데스크탑 연결과 독점적으로 사용되는 짧은 프로그램이 있습니다. 이전에는 프로그램이 방금 종료되어 연결이 끝나도록했지만 매우 느 렸습니다. 그래서 프로그램이 실행될 때 원격 세션을 종료하기 위해 다음 코드를 작성했습니다.

    [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.
}

이것은 컴파일러가 "릴리스"환경 변수가 어딘가에 선언 될 때만이 메소드를 호출하도록 지시합니다. 이는 컴파일 중 (빌드 속성 창의 조건부 컴파일 기호) 또는 운영 체제 쉘의 일부로 선언 할 수 있습니다. 조건부 정보 이것에 대한 더 많은 정보를 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top