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

C# 对在远程桌面上运行的程序使用调试模式,c#,debugging,pinvoke,remote-desktop,C#,Debugging,Pinvoke,Remote Desktop,我有一个专门用于远程桌面连接的短程序,该程序被设置为仅运行该程序,不允许任何其他访问远程计算机的权限。以前,程序只是退出并让连接终止,但速度非常慢,因此我编写了以下代码,在程序运行完毕后终止远程会话 [DllImport("wtsapi32.dll", SetLastError = true)] static extern bool WTSLogoffSession(IntPtr hServer, int SessionId, bool bWait); private

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

    [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是更好的做法,但我认为您不能否定这一点,因此您需要自己为“RELEASE”设置一个环境变量:

[Conditional ( "RELEASE" )]
private void HardTerminalExit()
{
  // Hard Exit, only called when "RELEASE" is defined.
}
这将告诉编译器仅在某处声明了“RELEASE”环境变量时调用此方法-这可以在编译过程中声明(生成属性窗格上的条件编译符号),也可以作为操作系统外壳的一部分,请参阅以获取有关此方法的更多信息