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

如何为VB.NET开发的软件制作含注册功能的setup.exe安装程序?

在VB.NET软件安装过程中让用户设置专属登录账号的实现方案

一、通过Visual Studio安装项目创建自定义注册界面

  1. 先给Visual Studio安装「Microsoft Visual Studio Installer Projects」扩展(VS2019及以后版本需要手动安装),然后创建一个安装项目。
  2. 右键安装项目 → 添加 → 对话框,选择「用户注册」对话框(或自定义对话框),添加用户名输入框、密码输入框和确认密码输入框,确保输入框的属性名(如USERNAME、PASSWORD)可识别。
  3. 在对话框的属性中,设置CustomActionData参数,把用户输入的账号密码传递给后续动作,格式为:/Username="[USERNAME]" /Password="[PASSWORD]"(方括号里的是输入框的属性名)。

二、编写自定义安装动作(VB.NET类库)

  1. 创建一个VB.NET类库项目,添加System.Configuration.Install引用。
  2. 编写继承自Installer的类,重写Install方法,获取安装参数中的账号密码,加密后保存到安全位置(推荐注册表,也可选择加密的配置文件)。示例代码:
Imports System.Configuration.Install
Imports System.ComponentModel
Imports System.Security.Cryptography
Imports System.Text
Imports Microsoft.Win32

<RunInstaller(True)>
Public Class CustomInstaller
    Inherits Installer

    Public Overrides Sub Install(savedState As System.Collections.IDictionary)
        MyBase.Install(savedState)

        ' 读取安装时用户输入的账号密码
        Dim inputUsername = Me.Context.Parameters("Username")
        Dim inputPassword = Me.Context.Parameters("Password")

        ' 加密密码(示例用AES,实际可根据需求换更安全的加密方式)
        Dim encryptedPwd = EncryptPassword(inputPassword, "YourUniqueKey")

        ' 保存到注册表(HKCU对当前用户有效,HKLM需要管理员权限)
        Using regKey = Registry.CurrentUser.CreateSubKey("Software\YourAppID\AuthInfo")
            regKey.SetValue("Username", inputUsername)
            regKey.SetValue("EncryptedPwd", encryptedPwd)
        End Using
    End Sub

    ' AES加密方法示例
    Private Function EncryptPassword(rawPwd As String, key As String) As String
        Using aes = Aes.Create()
            aes.Key = Encoding.UTF8.GetBytes(key.PadRight(32).Substring(0, 32))
            aes.IV = Encoding.UTF8.GetBytes(key.PadRight(16).Substring(0, 16))

            Dim encryptor = aes.CreateEncryptor(aes.Key, aes.IV)
            Using ms = New System.IO.MemoryStream()
                Using cs = New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
                    Using sw = New System.IO.StreamWriter(cs)
                        sw.Write(rawPwd)
                    End Using
                    Return Convert.ToBase64String(ms.ToArray())
                End Using
            End Using
        End Using
    End Function
End Class
  1. 编译类库后,回到安装项目,右键 → 视图 → 自定义动作,在「安装」节点右键添加自定义动作,选择类库的输出文件。

三、登录页面的验证逻辑

在软件的登录页面,读取注册表中保存的账号和加密密码,对用户输入的密码做相同加密后比对验证。示例代码:

Imports System.Security.Cryptography
Imports System.Text
Imports Microsoft.Win32

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Dim inputUser = txtUsername.Text.Trim()
    Dim inputPwd = txtPassword.Text.Trim()

    ' 从注册表读取保存的认证信息
    Using regKey = Registry.CurrentUser.OpenSubKey("Software\YourAppID\AuthInfo")
        If regKey Is Nothing Then
            MessageBox.Show("未检测到注册信息,请重新安装软件")
            Return
        End If

        Dim savedUser = regKey.GetValue("Username").ToString()
        Dim savedEncryptedPwd = regKey.GetValue("EncryptedPwd").ToString()
        Dim inputEncryptedPwd = EncryptPassword(inputPwd, "YourUniqueKey")

        ' 验证账号密码
        If inputUser = savedUser AndAlso inputEncryptedPwd = savedEncryptedPwd Then
            MainForm.Show()
            Me.Hide()
        Else
            MessageBox.Show("用户名或密码错误")
        End If
    End Using
End Sub

' 和安装时一致的加密方法
Private Function EncryptPassword(rawPwd As String, key As String) As String
    Using aes = Aes.Create()
        aes.Key = Encoding.UTF8.GetBytes(key.PadRight(32).Substring(0, 32))
        aes.IV = Encoding.UTF8.GetBytes(key.PadRight(16).Substring(0, 16))

        Dim encryptor = aes.CreateEncryptor(aes.Key, aes.IV)
        Using ms = New System.IO.MemoryStream()
            Using cs = New CryptoStream(ms, encryptor, CryptoStreamMode.Write)
                Using sw = New System.IO.StreamWriter(cs)
                    sw.Write(rawPwd)
                End Using
                Return Convert.ToBase64String(ms.ToArray())
            End Using
        End Using
    End Using
End Function

四、关键注意事项

  • 加密密钥不要硬编码,可结合机器硬件特征(如CPU ID、硬盘序列号)生成,避免密钥泄露后密码被破解。
  • 若选择HKLM注册表路径,安装程序需要管理员权限运行;HKCU路径则仅对当前用户生效,无需管理员权限。
  • 安装对话框要添加输入校验:比如用户名不能为空、两次密码输入一致等,提升用户体验。
  • 如果用ClickOnce部署,无法使用自定义安装动作,可改为软件首次启动时引导用户设置账号密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:50:27