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

VB.Net应用首次运行判断异常问题求助

问题分析与修复方案

我一眼就看出你代码里的两个关键问题,导致了非首次运行时程序依然会启动的情况:

  1. 未阻止主窗体加载:非首次运行时,你只弹出了许可证验证对话框,却没有在验证不通过时终止主窗体的加载流程。对话框关闭后代码会继续执行,主窗体自然就显示出来了。
  2. 无条件修改FirstRun设置:不管初始状态如何,你在判断分支结束后都强制把FirstRun设为False并保存——虽然首次运行时这没问题,但逻辑上没必要在非首次分支里重复执行这个操作。
  3. 多余的Me.Show()调用:在Form1_Load事件里,窗体默认会在加载完成后自动显示,这个调用完全没必要。

修正后的代码

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' 先隐藏窗体,避免处理逻辑时短暂闪现
    Me.Visible = False

    If My.Settings.FirstRun Then
        ' 首次运行:显示主窗体,标记为非首次运行
        Me.Visible = True
        My.Settings.FirstRun = False
        My.Settings.Save()
    Else
        ' 非首次运行:弹出许可证验证窗口
        Using licenseDialog As New ValidateLicense()
            ' 根据验证结果决定是否启动程序
            If licenseDialog.ShowDialog() <> DialogResult.OK Then
                ' 验证不通过,直接关闭主窗体终止程序
                Me.Close()
                Return
            End If
            ' 验证通过,显示主窗体
            Me.Visible = True
        End Using
    End If
End Sub

关键调整说明

  • 提前隐藏主窗体:设置Me.Visible = False可以避免在处理验证逻辑时,主窗体短暂显示后又关闭,提升用户体验。
  • 分支内单独处理设置:只在首次运行的分支里修改FirstRun为False并保存,逻辑更清晰,也避免不必要的重复操作。
  • 根据验证结果控制程序走向:通过判断ValidateLicense对话框的DialogResult,如果验证不通过就直接关闭主窗体并终止后续代码执行,这样程序就不会启动了。
  • 使用Using语句:确保许可证对话框的资源被正确释放,这是.NET里使用窗体对话框的最佳实践。

另外,别忘了检查你的ValidateLicense窗体:在验证通过的按钮点击事件里,要设置Me.DialogResult = DialogResult.OK再关闭窗体;验证失败时可以设置Me.DialogResult = DialogResult.Cancel,这样上面的代码才能正确判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:39:58