Question

J'ai une application C # qui appelle une application C ++ non gérée via Process.Start ()

Sur certaines machines, si cette application C ++ est abandonnée, la boîte de dialogue d'erreur Just-In-Time qui s'affiche me laisse

Existe-t-il un moyen de C # de détecter que l'application C ++ est erronée et de la redémarrer simplement

(Je n'ai pas le source et ne peux donc pas modifier l'application C ++)

Était-ce utile?

La solution

La boîte de dialogue du débogueur JIT s'affiche, car l'application C ++ est tombée en panne. Alors que le dialogue est ouvert, le processus est toujours présent (mais suspendu), ce qui signifie que la classe Process ne considérera pas qu'elle ait & "Sortie &"; jusqu'à ce que le dialogue JIT soit fermé ou qu'un débogueur attaché mette fin au processus.

Vous pouvez désactiver le débogage JIT sur les ordinateurs rencontrant le problème (je pense que le fait de désactiver le service Machine Debug Manager peut désactiver le débogage JIT), ce qui permet à l'application de se bloquer et de mourir (et, par conséquent, signalez comme " quitté "), ou (et je ne sais pas comment vous allez procéder), voyez si vous pouvez obliger votre application C # hôte à se joindre en tant que débogueur pour l'application C ++ et recevoir une notification du blocage de l'application C ++, y mettre fin, puis agir en fonction des informations terminées.

Autres conseils

Si le C ++ est une console, vous pouvez vérifier deux choses,

  1. Le code de sortie, généralement 0, signifie normalement fermé sinon le problème (mais je pense que cela dépend de la convention utilisée pour développer cette application)

  2. Vérifiez l'erreur standard si elle est vide pour que tout se passe bien

    using (Process p = new Process ())    {

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top