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

