Domanda

Ho un'app C # che richiama un'applicazione C ++ non gestita tramite Process.Start ()

Su alcune macchine, se questa app C ++ si interrompe, mi rimane la finestra di dialogo di errore Just-In-Time che mostra

Esiste un modo da C # per rilevare che l'app C ++ ha errato e riavviarla

(Non ho la fonte per e quindi non posso modificare l'app C ++)

È stato utile?

Soluzione

Viene visualizzata la finestra di dialogo del debugger JIT perché l'app C ++ si è bloccata in qualche modo. Mentre la finestra di dialogo è aperta, il processo è ancora presente (ma sospeso), il che significa che la classe Process non lo considererà avere & Quot; uscito & Quot; fino a quando il dialogo JIT non viene chiuso o un debugger allegato termina il processo.

È possibile disabilitare il debug JIT sui computer che presentano il problema ( penso che la disabilitazione del servizio Machine Debug Manager potrebbe disabilitare il debug JIT), consentendo all'applicazione di arrestarsi in modo anomalo e morire (e, quindi, segnala come " uscito ") oppure (e non ho idea di come faresti per farlo) vedi se riesci a fare in modo che l'app C # host si colleghi come debugger per l'app C ++ e ricevere la notifica del crash dall'app C ++, terminarlo e quindi agire sulle informazioni che sono terminate.

Altri suggerimenti

Se il C ++ è basato su console puoi controllare due cose,

  1. Il codice di uscita, generalmente 0 significa che normalmente è chiuso altrimenti è un problema (ma penso che questo dipenda dalla convenzione utilizzata per sviluppare queste applicazioni)

  2. Controlla l'errore standard se è vuoto, quindi tutto è ok

    utilizzando (Processo p = nuovo Processo ())    {

     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)
     {
     }
    }
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top