En utilisant un mode de débogage pour un programme qui fonctionne sur un ordinateur de bureau à distance

StackOverflow https://stackoverflow.com/questions/371248

Question

J'ai un programme court qui est utilisé exclusivement avec une connexion de bureau à distance qui a été défini uniquement exécuter ce programme et ne permettra à aucun autre accès à la machine distante. Auparavant, le programme juste de sortir et de laisser la fin de connexion, mais il était très lent, donc je l'ai écrit le code suivant pour terminer la session à distance lorsque le programme est fait en cours d'exécution.

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

Cela fonctionne bien lorsque ce programme est dans son environnement de production, utilisé par les personnes qui sont Remoting en utilisant un fichier de connexion RDP spécifique. La connexion sort après le programme est exécuté. Cependant, lors du test et le débogage de ce programme, mon ordinateur redémarre après chaque exécution.

Je cherche une bonne façon de faire la distinction entre ces cas. Dois-je mettre en place une sorte de script de débogage et exécute les télécommandes à distance le programme? Ou est-il un moyen de détecter si le programme est en cours d'exécution programme en mode débogage et désactiver simplement la procédure de sortie dans ce cas?

Était-ce utile?

La solution

Vous pouvez utiliser les directives pragma:

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

Je crois qu'il est préférable pratique d'utiliser la plus récente ConditionalAttribute, mais je ne pense pas que vous pouvez nier que, donc vous aurez besoin de définir une variable d'environnement pour « RELEASE » vous:

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

Ceci va dire au compilateur de n'appeler cette méthode lorsque la variable d'environnement « RELEASE » est déclaré quelque part - cela peut déclarer dans la compilation (symboles de compilation conditionnelle dans le volet immobilier de construction) ou dans le cadre de l'enveloppe du système d'exploitation, voir ConditionalAttribute pour plus inforamation à ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top