【问题标题】:Using a debug mode for a program that runs on a remote desktop对在远程桌面上运行的程序使用调试模式
【发布时间】:2008-12-16 13:08:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# debugging pinvoke remote-desktop


    【解决方案1】:

    您可以使用 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”环境变量在某处声明时调用此方法 - 这可以在编译期间声明(生成属性窗格上的条件编译符号)或作为操作系统外壳的一部分,请参阅ConditionalAttribute 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 2010-09-14
      • 2015-06-14
      • 2015-12-06
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多