安装更新后,fVB.NET Windows Update崩溃



在极少数情况下,我的程序在安装完更新后会崩溃。它只会给我一个:"ProgramName已停止响应"错误并崩溃。我知道它一定是在我的windows更新安装的安装方法中的某个地方,但我不知道错误是什么或在哪里。

也许对WUAPI.dll有更多了解的人可以帮助我?

这个程序是从U盘上运行的,我有时可以通过将程序移动到桌面上并从那里运行来"解决"这个问题,但我想避免这样做。还有AFAIK,在更新安装过程中,我的代码都没有真正访问U盘,也没有需要访问U盘上的程序。当然,我可能只是错过了一些非常基本的东西。。

#Region "Installation method"
Public Sub iInstallation()
Progression = "UpdateInstall"
iUpdateInstaller = TryCast(UpdateSession.CreateUpdateInstaller(), IUpdateInstaller)
iUpdateInstaller.Updates = NewUpdatesCollection
iInstallationJob = iUpdateInstaller.BeginInstall(New iUpdateInstaller_onProgressChanged(Me), New iUpdateInstaller_onCompleted(Me), New iUpdateInstaller_state(Me))
End Sub
Public Sub iInstallationComplete()
Try
Progression = "InstallComplete"
iDownloadJob.CleanUp()
iInstallationResult = iUpdateInstaller.EndInstall(iInstallationJob)
InvokeUIChangeText = "Installation Complete..."
InvokeUIChange()
If iInstallationResult.ResultCode = OperationResultCode.orcSucceeded Or iInstallationResult.ResultCode = OperationResultCode.orcSucceededWithErrors Then
message = "Installation done. " & iInstallationJob.Updates.Count & " Updates installed"
caption = "Installation Successfull"
buttons = MessageBoxButtons.OK
ikon = MessageBoxIcon.Information
MessageBox.Show(message, caption, buttons, ikon)
Me.Close()

Else
message = "One or more installations failed to install."
caption = "Installation failure"
buttons = MessageBoxButtons.OK
ikon = MessageBoxIcon.[Error]
MessageBox.Show(message, caption, buttons, ikon)
Me.Close()

End If
Catch err As Exception
MsgBox(err.Message)
End Try
End Sub
Public Class iUpdateInstaller_onProgressChanged
Implements IInstallationProgressChangedCallback
Private form1 As WUAPIProgress
Public Sub New(mainForm As WUAPIProgress)
Me.form1 = mainForm
End Sub
Public Sub Invoke(installationJob As IInstallationJob, e As IInstallationProgressChangedCallbackArgs) Implements IInstallationProgressChangedCallback.Invoke
Dim x As Integer = e.Progress.CurrentUpdatePercentComplete
form1.Invoke(Sub()
form1.Action.Text = "Installere opdatering " & e.Progress.CurrentUpdateIndex + 1 & "/" & installationJob.Updates.Count & " " & installationJob.Updates.Item(e.Progress.CurrentUpdateIndex + 1).Title
form1.ProgressBar1.Value = x
form1.Refresh()
End Sub)
End Sub
End Class
Public Class iUpdateInstaller_onCompleted
Implements IInstallationCompletedCallback
Private form1 As WUAPIProgress
Public Sub New(mainForm As WUAPIProgress)
Me.form1 = mainForm
End Sub
Public Sub Invoke(installationJob As WUApiLib.IInstallationJob, callbackArgs As IInstallationCompletedCallbackArgs) Implements IInstallationCompletedCallback.Invoke
form1.iInstallationComplete()
End Sub
End Class
Public Class iUpdateInstaller_state
Private form1 As WUAPIProgress
Public Sub New(mainForm As WUAPIProgress)
Me.form1 = mainForm
msgbox("Starting installation")
End Sub
End Class
#End Region

可能还值得注意的是,在表格关闭和表格关闭事件期间,我有以下内容

Private Sub WUAPIProgress_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
Try

Dim AutoUpdate = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWAREMicrosoftWindowsCurrentVersionWindowsUpdateAuto Update", True)
AutoUpdate.SetValue("AUOptions", 4)
If Progression = "UpdateSearch" Or Progression = "SearchComplete" Then

iSearchJob.RequestAbort()

ElseIf Progression = "UpdateDownload" Or Progression = "UpdateComplete" Then
iDownloadJob.RequestAbort()

ElseIf Progression = "UpdateInstall" Or Progression = "InstallComplete" Then

iInstallationJob.RequestAbort()
End If

Catch err As Exception
MsgBox(err.Message)
End Try
End Sub

和:

Private Sub WUAPIProgress_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
Me.Dispose()
End Sub

我以为我有一些错误输出,不幸的是,毕竟没有。这与其他事情有关。

编辑:

全球代码捕获:

Namespace My
' The following events are available for MyApplication:
' 
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Private Delegate Sub SafeApplicationThreadException(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)
Private Sub ShowDebugOutput(ByVal ex As Exception)
Dim frmD As New frmDebug()
frmD.rtfError.AppendText(ex.ToString())
frmD.ShowDialog()
Environment.Exit(0)
End Sub
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup

AddHandler System.Windows.Forms.Application.ThreadException, AddressOf app_ThreadException

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf AppDomain_UnhandledException
End Sub
Private Sub app_ThreadException(ByVal sender As Object, ByVal e As Threading.ThreadExceptionEventArgs)

If MainForm.InvokeRequired Then
MainForm.Invoke(New SafeApplicationThreadException(AddressOf app_ThreadException), New Object() {sender, e})
Else
ShowDebugOutput(e.Exception)
End If
End Sub
Private Sub AppDomain_UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
ShowDebugOutput(DirectCast(e.ExceptionObject, Exception))
End Sub
Private Sub MyApplication_UnhandledException(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
ShowDebugOutput(e.Exception)
End Sub
End Class

End Namespace

编辑:

我已经找到了可能的主要问题。

程序是从U盘上运行的,如果在程序完成之前移除了U盘,无论出于何种原因,它都会试图到达应用程序启动的地方(U盘),然后失败并崩溃。

因此,我似乎必须让程序自己复制,然后从计算机上的某个位置运行。然而,奇怪的是,这并不总是一个问题。但在运行Windows 8.1的虚拟机上,我几乎每次都会观察到它。

我想我会更喜欢它,因为我更喜欢在程序启动并运行后能够移除usb棒。。我很困惑,为什么它必须访问.exe才能完成?

使其成为全局应该没有任何问题,只需使用以下代码:

Public Shared Sub Main(args As String())
AppDomain.CurrentDomain.UnhandledException += New UnhandledExceptionEventHandler(AddressOf ApplicationUnhandledException)
End Sub
Private Sub ApplicationUnhandledException(sender As Object, e As UnhandledExceptionEventArgs)
'Write all the information to help diagnose the problem
End Sub

然后提供Hans&或者我提供信息。

相关内容

  • 没有找到相关文章

最新更新