对在远程桌面上运行的程序使用调试模式

时间:2008-12-16 13:08:43

标签: c# debugging pinvoke remote-desktop

我有一个短程序,专门用于远程桌面连接,该连接已设置为仅运行该程序,不允许任何其他访问远程计算机。以前,该程序刚退出并让连接终止,但速度非常慢,所以我编写了以下代码,以便在程序运行完毕后终止远程会话。

    [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连接文件的人员使用。程序运行后退出连接。但是,在测试和调试此程序时,我的计算机会在每次运行后重新启动。

我正在寻找区分这些案例的好方法。我应该设置某种远程调试脚本并运行程序的调试脚本吗?或者是否有某种方法以编程方式检测程序是否在调试模式下运行,并且在这种情况下只是禁用退出过程?

1 个答案:

答案 0 :(得分:2)

您可以使用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”环境变量被声明的地方调用此方法 - 这可以在编译期间声明(Build属性窗格上的条件编译符号)或作为操作系统shell的一部分,请参阅ConditionalAttribute有关此问题的更多信息。