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

VB.NET 2019社区版PoS项目(含SQL Server、Crystal Reports)生成exe安装包咨询

生成包含SQL Server数据库与Crystal Reports的PoS安装包及动态连接字符串处理方案

一、数据库部署准备

因为你的数据库是通过SSMS创建且未附加到项目,需要先导出可执行的部署脚本:

  • 打开SSMS,连接目标数据库,右键点击数据库→任务→生成脚本
  • 选择「整个数据库」,勾选「包括创建数据库」选项,设置脚本保存路径
  • 编辑生成的脚本,将数据库文件(.mdf/.ldf)的硬编码路径替换为相对路径,或者保留占位符,后续通过安装参数动态指定

二、Crystal Reports依赖处理

  • 确认项目引用的是Crystal Reports for Visual Studio 2019版本,若未安装需先在VS扩展市场下载安装
  • 安装项目中需包含Crystal Reports运行时:
    • 若使用InstallShield,在「Redistributables」面板中找到对应版本的Crystal Reports合并模块并勾选
    • 也可直接下载官方独立运行时安装包(如CRRuntime_64bit_13_0_30.msi,根据项目位数选择),将其添加到安装项目中,设置为安装时自动执行

三、用InstallShield Limited Edition创建安装包(VS2019社区版自带)

  1. 新建安装项目:打开VS2019→新建项目→其他项目类型→安装和部署→InstallShield Limited Edition Project
  2. 配置基础信息:填写应用名称、版本、发布路径等
  3. 添加主程序文件:在「Application Files」面板中,添加PoS项目生成的.exe文件及所有依赖项(如dll、资源文件)
  4. 添加数据库脚本部署:
    • 将之前生成的SQL脚本添加到安装项目的文件列表,设置为「安装时复制到目标目录」
    • 在「Custom Actions」面板中添加自定义动作,调用sqlcmd.exe执行脚本,示例命令:
      sqlcmd -S [SERVER_NAME] -U [DB_USER] -P [DB_PWD] -i "[TARGETDIR]\\你的数据库脚本.sql"
      
      其中[SERVER_NAME]等参数将通过安装界面让用户输入
  5. 配置安装界面:在「User Interface」面板中添加输入控件,让用户填写目标SQL Server名称、数据库用户名、密码等信息,将输入值绑定到上述自定义动作的参数中

四、动态连接字符串处理(适配目标服务器变化)

方案1:安装时写入配置文件

通过InstallShield的自定义动作,将用户输入的服务器信息写入程序配置文件:

' 自定义动作中的VB.NET代码
Dim targetDir As String = Context.Parameters("TARGETDIR")
Dim configPath As String = Path.Combine(targetDir, "PoS.exe.config")
Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(configPath)
Dim connSetting As ConnectionStringSettings = config.ConnectionStrings.ConnectionStrings("PoSConn")

If connSetting IsNot Nothing Then
    connSetting.ConnectionString = $"Data Source={Context.Parameters("SERVER_NAME")};Initial Catalog=PoSDb;User ID={Context.Parameters("DB_USER")};Password={Context.Parameters("DB_PWD")}"
    config.Save(ConfigurationSaveMode.Modified)
    ConfigurationManager.RefreshSection("connectionStrings")
End If

方案2:程序首次运行时配置

在PoS程序启动逻辑中添加连接有效性检查,若连接失败则弹出配置窗口:

' 程序启动时的检查代码
Try
    Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("PoSConn").ConnectionString)
        conn.Open()
    End Using
Catch ex As Exception
    Dim configForm As New ConnectionConfigForm() ' 自定义的配置窗口
    If configForm.ShowDialog() = DialogResult.OK Then
        Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
        config.ConnectionStrings.ConnectionStrings("PoSConn").ConnectionString = configForm.GetConnectionString()
        config.Save(ConfigurationSaveMode.Modified)
        ConfigurationManager.RefreshSection("connectionStrings")
    Else
        Application.Exit()
    End If
End Try

五、安装包测试

在未安装SQL Server和Crystal Reports的干净测试机上执行安装:

  • 验证安装界面是否正常收集服务器信息
  • 检查数据库是否自动创建完成
  • 确认Crystal Reports报表能正常加载
  • 测试程序是否能成功连接目标数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:03:10