You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET ClickOnce发布应用:更新版本显示异常问题求助

解决ClickOnce更新版本号显示错误的问题

问题核心在于CheckForUpdate()方法仅返回是否存在更新的布尔值,不会主动拉取服务器端最新版本的详细元数据,导致直接读取ApplicationDeployment.UpdatedVersion时,仍获取的是当前运行程序的版本号。需要改用CheckForDetailedUpdate()方法获取包含完整更新信息的对象。

修改后的代码如下:

If ApplicationDeployment.IsNetworkDeployed Then
    Dim deployment As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
    Dim updateInfo As UpdateCheckInfo = Nothing

    Try
        ' 获取包含版本信息的详细更新数据
        updateInfo = deployment.CheckForDetailedUpdate()
        
        If updateInfo.UpdateAvailable Then
            Dim currentVersion As Version = deployment.CurrentVersion
            ' 从updateInfo中提取服务器端的最新版本号
            Dim updatedVersion As Version = updateInfo.AvailableVersion

            lbl_mes_text.Text = "Client Version [" & updatedVersion.ToString() & "] is now available. " &
                vbCrLf &
                "Current Version [" & currentVersion.ToString() & "] " &
                vbCrLf &
                "Please exit the dialog and login again."

            If (Not pnl_New_Dialog.Visible) Then pnl_New_Dialog.Visible = True
        End If
    Catch ex As DeploymentDownloadException
        ' 处理网络故障导致的更新信息获取失败
        lbl_mes_text.Text = "Failed to check for updates: " & ex.Message
        If (Not pnl_New_Dialog.Visible) Then pnl_New_Dialog.Visible = True
    Catch ex As InvalidDeploymentException
        ' 处理部署文件损坏或配置错误的情况
        lbl_mes_text.Text = "Invalid deployment configuration: " & ex.Message
        If (Not pnl_New_Dialog.Visible) Then pnl_New_Dialog.Visible = True
    End Try
End If

关键调整说明:

  • 使用CheckForDetailedUpdate()替代CheckForUpdate(),该方法返回的UpdateCheckInfo对象中,AvailableVersion属性才是服务器端的最新版本号。
  • 增加异常处理逻辑,覆盖网络异常、部署文件损坏等常见场景,避免程序崩溃。

内容的提问来源于stack exchange,提问作者theCodingVapistGolfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:22:36