社区首页 >问答首页 >fVB.NET Windows更新在完成安装更新时崩溃

fVB.NET Windows更新在完成安装更新时崩溃
EN

Stack Overflow用户
提问于 2015-04-23 10:27:47
回答 1查看 244关注 0票数 0

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

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

程序是从U盘上运行的,有时我可以通过将程序移到桌面并从那里运行来“修复”问题,但我希望避免不得不这样做。还有AFAIK,在更新安装过程中,我的代码都不会访问U盘,也不需要访问U盘上的程序。当然,我可能遗漏了一些非常基本的东西..

代码语言:javascript
代码运行次数:0
复制
#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

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

代码语言:javascript
代码运行次数:0
复制
Private Sub WUAPIProgress_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
    Try


        Dim AutoUpdate = My.Computer.Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto 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

和:

代码语言:javascript
代码运行次数:0
复制
Private Sub WUAPIProgress_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
    Me.Dispose()
End Sub

我以为我有一些错误输出,不幸的是,毕竟没有。它与其他一些东西有关。

编辑:

全局代码捕获:

代码语言:javascript
代码运行次数:0
复制
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盘),然后它会失败,并崩溃。

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

我想我会更多地玩弄它,因为我更喜欢在程序启动并运行后能够移除U盘。我不明白为什么它必须访问.exe才能完成?

EN

回答 1

Stack Overflow用户

发布于 2015-04-27 14:07:25

将其设置为全局应该不会有任何问题,只需使用以下代码:

代码语言:javascript
代码运行次数:0
复制
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和/或I提供信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29820722

复制
相关文章
Groovy 添加带注释的Map构造函数
从Groovy的早期开始,我们可以创建POGO(Plain Old Groovy Objects)类,它们将具有带有Map参数的构造函数。 Groovy在生成的类中自动添加构造函数。我们可以使用命名参数来创建POGO的实例,因为Map参数构造函数。 这只有在我们不添加自己的构造函数且属性不是最终的时才有效。从Groovy 2.5.0开始,我们可以使用@MapConstrutor AST转换注释来添加带有Map参数的构造函数。使用注释我们可以有更多选项来自定义生成的构造函数。例如,我们可以让Groovy使用Map参数生成构造函数,并添加我们自己的构造函数。 属性也可以是final,我们仍然可以使用带有Map参数的构造函数。
白石
2019/08/23
1.1K0
Java里的构造函数(构造方法)
本文转载之https://www.cnblogs.com/livterjava/p/4709561.html
用户7886150
2021/01/31
2.5K0
@Autowired的使用:推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
java架构师
2019/06/13
2K0
JAVA & .NET创建对象构造函数调用顺序
基类静态初始化块——当前类静态初始化块——基类初始化块——基类构造函数——当前类初始化块——当前类构造函数
雪飞鸿
2019/03/08
1.1K0
java构造函数调用另一个构造函数_java中的构造函数
* 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
用户7886150
2021/04/29
4.5K0
java scanner构造函数_使用Scanner作为构造函数的参数的Java
这是一个学校任务的问题,这就是为什么我这样做的原因。使用Scanner作为构造函数的参数的Java
用户7886150
2021/04/26
2.8K0
Java 构造函数的详解
我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的。那么我们在java里面怎么在对象一旦创建就赋值呢?
全栈程序员站长
2022/09/08
5610
[ Java学习基础 ] Java构造函数
   构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用。 Java构造方法的特点如下: 构造方法名必须与类名相同。 构造方法没有任何返回值,包括void。 构造方法只能与new运算符结合使用。 示例代码如下: 1 //Rectangle.java文件 2 package com.a51work6; 3 4 // 矩形类 5 public class Rectangle { 6 7 // 矩形宽度 8 int wi
Kevin_Zhang
2018/05/22
1.3K0
通过工厂函数、构造函数创建对象
当我们有多个变量的结构非常类似时,如下所示,反复书写结构过于麻烦,我们可以定义一个工厂函数来创建对象
很酷的站长
2022/12/21
7890
通过工厂函数、构造函数创建对象
什么是java构造函数_什么是java构造函数
构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值。构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过构造函数初始化。一个类中如果没有定义过构造函数,那么该类会有一个默认的空参数构造函数。如果在类中定义了指定的构造函数,那么该类中的默认构造函数就没有了。
全栈程序员站长
2022/09/08
1.2K0
js 中的构造函数,构造函数作用,构造函数和普通函数的区别
函数的定义方式: 1.声明式函数定义: function 函数名 (){};这种定义方式,会将函数声明提升到该函数所在作用域的最开头,也是就无论你在这个函数的最小作用域的那儿使用这种方式声明的函数,在这个作用域内,你都可以调用这个函数为你所用。 2.函数表达式:let fun = function(){}; 此方式定义的函数,只能在该作用域中,这段赋值代码执行之后才能通过fun()调用函数,否则,由于变量声明提升,fun === undefined。 3.new Function 形式: var fun1 = new Function (arg1 , arg2 ,arg3 ,…, argN , body );Function构造函数所有的参数都是字符串类型。除了最后一个参数, 其余的参数都作为生成函数的参数即形参。这里可以没有参数。最后一个参数, 表示的是要创建函数的函数体。
全栈程序员站长
2022/10/04
3.5K0
【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )
1 . 构造函数个数 : Kotlin 类定义时需要指定主构造函数 , 还可以指定 0 ~ 多个次构造函数 ;
韩曙亮
2023/03/27
4.1K0
Groovy 元组构造函数创建
Groovy 1.8添加了@TupleConstructor注释。 通过这个注释,我们可以在编译时自动创建一个元组构造函数。 因此构造函数可以在编译的类中找到。 对于类中的每个属性,将使用默认值创建构造函数中的参数。 类中定义的属性的顺序还定义了构造函数中参数的顺序。 因为参数具有默认值,所以我们可以使用Groovy语法,并在使用构造函数时将参数留在参数列表的末尾。
白石
2019/09/18
1.3K0
@Autowired的使用--Spring规范解释,推荐对构造函数进行注释
Spring Team recommends "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies.
ydymz
2018/09/10
4.2K0
Java复制构造函数
----------------------------------------------------------------------------------
用户7886150
2020/12/15
9610
java构造函数方法声明无效_如何构造函数
Java构造函数,也叫构造方法,是JAVA中一种特殊的函数。与函数名相同,无返回值。
全栈程序员站长
2022/10/05
1.7K0
C++核心准则C.51:使用委托构造函数实现所有构造函数的共通动作
C.51: Use delegating constructors to represent common actions for all constructors of a class C.51:使用委托构造函数实现所有构造函数的共通动作
面向对象思考
2020/03/25
6890
【说站】js创建构造函数的注意点
推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。
很酷的站长
2022/11/24
7230
【说站】js创建构造函数的注意点
LeetCode - 所有可能的路径
我又重新开始更新LeetCode了,以后工作日更新LeetCode,周末更新东野圭吾的小说
晓痴
2019/07/24
7490
LeetCode - 所有可能的路径
java构造代码块,构造函数和普通函数的区别和调用时间
在这里我们谈论一下构造代码块,构造函数和普通函数的区别和调用时间。 构造代码块:最早运行,比构造函数运行的时间好要提前,和构造函数一样,只在对象初始化的时候运行。 构造函数:运行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。 普通函数:不能自动调用,需要对象来调用,例如a.add(); 如果只看代码运行先后顺序的话:构造代码块>构造函数>普通函数 下面给一个程序
用户3030674
2018/09/14
1.5K0
java构造代码块,构造函数和普通函数的区别和调用时间

相似问题

UIKeyboardWillChangeFrameNotification并非总是被调用

152

CallListener onCallProgressing()并非总是被调用

10

Viewpager Fragment 1 onCreateView并非总是被调用

19

从NSSharingService扩展调用FinderSync

14

并非总是调用NSMenuItem自定义视图drawRect

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档