【问题标题】:Check if Mage.exe batch manifest update was successful or not - ClickOnce检查 Mage.exe 批量清单更新是否成功 - ClickOnce
【发布时间】:2017-02-17 13:45:46
【问题描述】:

我创建了一个控制台应用程序,它在代码中创建一个批处理文件,当新版本发布时,它将使用 mage.exe 自动更新和重新签署我的应用程序清单文件。

该批处理文件在创建后由同一个控制台应用程序执行。

我想知道是否有办法确定 mage.exe 批处理文件是否在更新或签署清单时失败?

任何帮助或想法将不胜感激。

更新

根据 TnTinMn 的评论,我强制批处理无法更新清单。这返回了 1 的退出代码。我怎么可能提取该退出代码来进行错误处理?我正在做以下事情:

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,但我似乎无法从那里提取它。

【问题讨论】:

  • Mage 失败时是否返回退出代码?如果是,请检查批处理文件中的 ErrorLevel。
  • @TnTinMn 感谢您的提示。我已经更新了我的问题。
  • 这是什么意思:looking at the sval object's properties, the exit code is set to 1 but i can't seem to extract it from there。不清楚您当前的问题是什么?显示 updatemanifest.bat 的内容也可能对您有利。
  • 使用 Process.ExitCode 属性。 0 以外的任何值都表示该过程未正常完成。错误码值取决于具体流程,不规范。
  • @TnTinMn 抱歉没有说清楚。我将 sval 对象设置为等于我启动的 Process.Start。在调试中,我探索了 sval 对象,其中一个属性是 ExitCode,当发生错误时它等于 1。简而言之,我想做以下事情:if sval.exitcode = 1 then messagebox.show("an error occured") else messagebox.show("successful") 问题不在 mage.exe 批处理文件中。我只想在发生错误时处理。

标签: vb.net batch-file console-application clickonce mage


【解决方案1】:

有两种方法(据我所知),您可以等待进程退出,然后再检索 Process.ExitCode。

第一个 as 是阻塞调用: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2018-08-29
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    相关资源
    最近更新 更多