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
相关产品推荐
相关产品推荐

