2017-02-17 9 views
0

Ich habe eine Konsolenanwendung erstellt, die eine Batchdatei im Code erstellt, die meine App-Manifestdatei mit mage.exe automatisch aktualisiert und neu signiert, wenn sie neu ist Version wird veröffentlicht.Überprüfen Sie, ob das Batchmanifest-Update für Mage.exe erfolgreich war oder nicht - ClickOnce

Diese Stapeldatei wird dann von derselben Konsolenanwendung ausgeführt, nachdem sie erstellt wurde.

Ich möchte wissen, ob es eine Möglichkeit gibt zu bestimmen, ob die Batchdatei mage.exe beim Aktualisieren oder Signieren des Manifests fehlgeschlagen ist.

Jede Hilfe oder Ideen werden geschätzt.

UPDATE

Per TnTinMn ‚s Kommentar, zwang ich die Partie auf die Aktualisierung der Manifest zum Scheitern verurteilt. Dies ergab einen Exit-Code von 1. Wie kann ich dann diesen Exit-Code extrahieren, um meine Fehlerbehandlung durchzuführen? Im Sie folgendermaßen vorgehen:

Dim procInfo As New ProcessStartInfo() 
procInfo.UseShellExecute = True 
procInfo.FileName = (sDriveLetter & ":\updatemanifest.bat") 
procInfo.WorkingDirectory = "" 
procInfo.Verb = "runas" 
procInfo.WindowStyle = ProcessWindowStyle.Hidden 
Dim sval As Object = Process.Start(procInfo) 'I tested the object to see if there is indeed a value that i can use. 

Während des Debuggens und Blick auf die sval Eigenschaften des Objekts wird der Exit-Code auf 1 gesetzt, aber ich kann es nicht von dort scheinen zu extrahieren.

+2

Gibt Mage bei einem Fehler einen Exitcode zurück? Wenn ja, überprüfen Sie das ErrorLevel in der Batch-Datei. – TnTinMn

+0

@TnTinMn danke für den Tipp. Ich habe meine Frage aktualisiert. – J2H656

+0

Was bedeutet das: 'Blick auf die Eigenschaften des Sval-Objekts, der Exit-Code ist auf 1 gesetzt, aber ich kann nicht scheinen, es von dort zu extrahieren. Es ist nicht klar, was dein aktuelles Problem ist? Es kann auch von Vorteil sein, den Inhalt von updatermanifest.bat anzuzeigen. – TnTinMn

Antwort

0

Es gibt zwei Möglichkeiten (die ich kenne), dass Sie warten können, bis der Prozess beendet wird, bevor Sie den Process.ExitCode abrufen.

Die erste als Sperr Anruf ist: Process.WaitForExit

und die zweite ist die Exit Ereignis zu verwenden.

Private Sub RunProcess() 
    Dim psi As New ProcessStartInfo() 
    psi.UseShellExecute = True 
    psi.WindowStyle = ProcessWindowStyle.Hidden 
    psi.FileName = "cmd.exe" 
    psi.Arguments = "/c Exit 100" 


    Dim proc As Process = Process.Start(psi) 
    proc.EnableRaisingEvents = True 
    AddHandler proc.Exited, AddressOf ProcessExited 
End Sub 

Private Sub ProcessExited(sender As Object, e As EventArgs) 
    Dim proc As Process = DirectCast(sender, Process) 
    proc.Refresh() 
    Dim code As Int32 = proc.ExitCode 
    Me.BeginInvoke(Sub() MessageBox.Show(String.Format("Process has exited with code: {0}", code)), Nothing) 
    proc.Dispose() 
End Sub 
Verwandte Themen