Frage

Ich habe ein kurzes Programm, das ausschließlich mit einer Remote-Desktop-Verbindung verwendet wird, die nur festgelegt worden ist, um dieses Programm ausführen und keinem anderen Zugang zu dem Remote-Rechner ermöglichen. Zuvor das Programm gerade verlassen und lassen Sie die Verbindung beenden, aber es war sehr langsam, so schrieb ich den folgenden Code, um die Remote-Sitzung zu beenden, wenn das Programm läuft getan.

    [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);
    }

Das funktioniert gut, wenn dieses Programm in seiner Produktionsumgebung ist, von den Menschen, die bei der Verwendung einer spezifische RDP-Verbindungsdatei sind remoting. Die Verbindung wird beendet, nachdem das Programm ausgeführt wird. Wenn jedoch das Testen und Debuggen dieses Programm, mein Computer neu gestartet wird nach jedem Lauf.

Ich bin auf der Suche nach einem guten Weg zwischen diesen Fällen zu unterscheiden. Sollte ich eine Art von Debug-Skript auf, die in Fernbedienungen und führt das Programm aus der Ferne? Oder ist es eine Möglichkeit, programmatisch zu erkennen, ob das Programm im Debug-Modus ausgeführt wird, und deaktivieren Sie einfach die Exit-Prozedur in diesem Fall?

War es hilfreich?

Lösung

Sie können die Pragma-Richtlinien verwenden:

private void HardTerminalExit()
{
  #if DEBUG
  // Soft Exit
  #else
  // Hard Exit
  #end if
}

Ich glaube, es ist besser Praxis ist die neuer ConditionalAttribute zu verwenden, aber ich glaube nicht, dass Sie negieren können, so müssen Sie eine Umgebungsvariable für „RELEASE“, um dich selbst:

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

Damit wird der Compiler sagen, nur diese Methode aufrufen, wenn die „RELEASE“ Umgebungsvariable irgendwo deklariert wird - dies während der Kompilierung erklärt in kann (Bedingtes Kompilieren Symbole auf dem Build-Eigenschaftsfenster) oder als Teil des Betriebssystem-Shell finden ConditionalAttribute für mehr inforamation zu diesem Thema.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top