2017-02-17 55 views
0

我已經創建了一個控制檯應用程序,該程序在代碼中創建批處理文件,當使用mage.exe時,會自動更新並重新簽署我的應用程序清單文件版本發佈。檢查Mage.exe批處理清單更新是否成功 - ClickOnce

這個批處理文件在創建它之後會被相同的控制檯應用程序執行。

我想知道是否有方法可以確定mage.exe批處理文件在更新或簽署清單時是否失敗?

任何幫助或想法,將不勝感激。

UPDATE

TnTinMn的評論,我強迫批失敗的更新清單。這返回了1的退出碼。那麼我怎麼可能提取出口代碼來做我的錯誤處理呢? Im做以下幾點:

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. 

在調試並查看SVAL對象的屬性,退出代碼設置爲1,但我似乎無法從那裏提取它。

+2

Mage在失敗時會返回退出碼嗎?如果是這樣,請檢查批處理文件中的ErrorLevel。 – TnTinMn

+0

@TnTinMn感謝您的提示。我更新了我的問題。 – J2H656

+0

這是什麼意思:「看着sval對象的屬性,退出代碼設置爲1,但我似乎無法從那裏提取它。目前尚不清楚你目前的問題是什麼?顯示updatemanifest.bat的內容也可能對您有利。 – TnTinMn

回答

0

在檢索Process.ExitCode之前,有兩種方法(我知道)可以等待進程退出。

第一是作爲一個阻塞調用:Process.WaitForExit

,第二個是使用Exit事件。

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