2008-12-16 30 views
0

我有一个专门用于远程桌面连接的简短程序,该程序仅设置为运行该程序,不允许任何其他访问进入远程计算机。之前,程序刚刚退出并让连接终止,但速度非常慢,所以我编写了下面的代码来在程序运行完时终止远程会话。对在远程桌面上运行的程序使用调试模式

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

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

回答

2

您可以使用编译指令:

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

这将告诉编译器只调用时,“释放”环境变量的地方宣布这个方法 - 这可以在编译时宣布(在构建资产面板条件编译符号)或者作为操作的一部分ng系统外壳,请参阅ConditionalAttribute了解更多信息。

+0

谢谢,我会尝试第二种选择 – 2008-12-16 15:15:55

相关问题