我有与一个已经设置为仅运行该程序并且不允许任何其它接入到远程机器的远程桌面连接专门用于一个简短的程序。此前,该方案只是退出,让连接终止,但它是非常缓慢的,所以我写了下面的代码程序完成运行时终止远程会话。

    [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,但我不认为你可以否定这一点,所以你需要设置“释放”自己的环境变量:

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

这会告诉编译器当“RELEASE”环境变量某处声明为只调用此方法 - 这可以在编译期间宣布(上生成属性窗格条件编译符号)或作为操作系统壳的一部分,见 ConditionalAttribute 获得这方面的更多inforamation

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top