2017-02-17 87 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 
相关问题