一、准备打包环境

程序概况

需要打包是读取数据库数据进行解算的一个WPF程序,数据库使用LocalDB,目标框架.NET Framewok 4.7.2,算法调用C++编写的DLL库文件,还加载了LiveCharts、MaterialDesignColors、Prism等第三方包。(数据库一开始用的是SQLServer2019建立,到后期要拷贝给其他同事做测试(无法组网),考虑打包难度和目标电脑安装复杂程度,暂时将数据库迁移到localDB。)

VS2022添加扩展组件

在线安装:VS2022→扩展→管理扩展→搜索Installer Projects→下载(此处是已安装该扩展)
图中是已安装了该扩展

离线安装:下载扩展文件InstallerProjects.vsix(注意版本):
VS2022和2019不是同一个扩展包
在电脑上关闭Visutal Studio后双击扩展包即可安装扩展。

二、打包操作步骤

Step1 建立Setup项目:

“解决方案资源管理器”中,在要打包的项目上方“解决方案”一项上右键→添加→新建项目。
在“添加新项目”页面中选择Setup Project项目,点击下一步;填写项目名称,点击创建。
新建Setup Project项目
如果在添加新项目页面没有上图红圈中的Setup Project项目,考虑是否打包环境没有安装成功。

Step2 添加项目输出组:

在Setup项目上右键→Add→项目输出。在“添加项目输出组”窗口选择项目为要打包的项目,选择“主输出”,点击确定。VS已经将项目引用中涉及到的DLL(如DryIoc.dll\Prism.dll等)添加进来了。
在这里插入图片描述

还需要手动将exe及调用的C++算法库(如果有)添加进来:在“Application Folder”上右键→Add→文件→选中目标文件点击打开,将文件添加进来。同样,可以在“Application Folder”下选择添加"Folder",生成“Data”、“Img”等文件夹,将程序所需的基础数据和图片、图标添加进来。

Step3 生成快捷方式:

在exe程序上点击右键,选择“Create Shorcut to xx.exe”生成快捷方式,为快捷方式重命名,在属性窗口中为该快捷方式更改图标。
更改快捷方式图标
右键→剪切→选择User’s Desktop→在右侧空白区域右键粘贴。

Step4 设置系统必备组件:

因为目标电脑上是否已有LocalDB2019及NET4.7.2还未可知,需要在安装时自动检测安装,通过设置软件系统必备组件可以实现。
系统必备组件

在Setup项目上点击右键→属性,在属性也中点击“Prerequisites…”,在弹出的“系统必备”页面中将“Microsoft.NET Framework 4.7.2(x86和x64)”及“SQL Server 20119 Express LocalDB”选中,在下方“制定系统必备组件的安装位置”中选择第一项“从组件供应商的网址上下载系统必备组件”(:在目标机安装时需联网,如缺少组件在安装时会自动下载并安装。如目标机无法联网应考虑第二项“从与我的应用程序相同的位置下载系统必备组件”,具体操作参见下方问题总结

Step5 添加.mdf数据库文件:

视图打开服务器资源管理器窗口,在数据连接→目标数据库上点击右键,选择分离数据库。不分离数据库的情况下,生成Setup项目时会报ERROR:“the file may be absent or locked”。
分离数据库

在上述的Data文件夹中添加.mdf文件,将ConnectionString改为相对路径,Release启动一下,此时连接数据库可能会报错,但安装在目标机后程序可以根据此相对路径顺利连接到数据库。

 string connectionString = @"Data Source=(localDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data\IERS_Caculation_DB.mdf;Integrated Security=True";

Step6 设置安装信息:

选中Setup项目,在属性栏中设置Manufacturer-(在默认安装路径中将作为一级文件夹的名称)、ProductName-(安装界面会填充在提示文字中,安装时也会作为路径中的一级)、Title-(安装界面的标题);

Step7 默认安装路径:

不做更改的情况下默认路径为[PrgramFilesFolder][Manufacturer][ProductName],需要更改的话点话在文件系统页面,点击“Application Folder”,在属性栏“DefaultLocation”项中进行更改。

Step8 生成:

全部操作完成后,在Setup项目上右键点击“生成”,项目即可完成打包。

三、问题总结

BUG1 目标电脑无网络连接

目标电脑没有网络连的情况下,无法在安装时联网下载所需的必备组件,需要将localdb及net4.7.2附带在安装包中进行本地安装。在上述设置系统必备组件步骤中需要将“制定系统必备组件的安装位置”选择为第二项:“从与我的应用程序相同的位置下载系统必备组件”,还需要将所需组件的安装包下载好放在指定位置。
此时直接生成Setup会产生“ ERROR: 要在“系统必备”对话框中启用“从与我的应用程序相同的位置下载系统必备组件”,必须将“Microsoft .NET Framework 4.7.2 (x86 和 x64)”项的文件“DotNetFX472\NDP472-KB4054530-x86-x64-AllOS-ENU.exe”下载到本地计算机。有关详细信息,请参见 http://go.microsoft.com/fwlink/?LinkId=616018。”错误信息,如图。
缺少必备组件
最初作者尝试根据错误信息中给出的网址去获取所需要的这4个文件,但发现下载好又放到对应位置后提示版本问题,仔细查看了这个帮助页面中的内容,发现官方给出了非常简单准确的方法。
在此我们需要的是NDP472-KB4054530-x86-x64-AllOS-ENU.exe、NDP472-KB4054530-x86-x64-AllOS-CHS.exe、sqllocaldb.msi、vc_redist.x64.exe这四个安装包,以NDP472-KB4054530-x86-x64-AllOS-ENU.exe为例,在路径C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\SqlLocalDB2019下打开Product.xml文件,复制下载路径到浏览器即可直接下载安装包。
在product.xml中寻找下载地址
将四个文件都下载好之后,分别放到对应位置。
文件位置

重新生成Setup项目,虽然可能会提示WARNINT“该特性值不匹配”,但可以生成成功,安装到目标机也没有问题。

BUG2 xml配置文件读取失败-设置软件默认管理员权限打开

软件如果安装在默认路径[PrgramFilesFolder]即“C:\Program Files (x86)”,在XP以上电脑使用软件时可能会出现无法打开xml或inf配置文件的问题,将软件增加“默认管理员权限”即可解决。
打开待打包项目的属性→安全性 页面,勾选“启用 ClickOnce安全设置”,在Properties→app.manifest文件中,将level="asInvoker"改为level=“requireAdministrator”

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">       
	<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>

回到安全性页面取消勾选“启用 ClickOnce安全设置”,重新生成运行软件。

BUG3 数据库的readonly问题

软件安装在[PrgramFilesFolder]盘时,可能面临软件进行数据库增删改操作时弹出ReadOnly错误提示(如果代码中捕获了错误进行弹出的话)或直接闪退的情况,原因是.mdf数据库文件在[PrgramFilesFolder]盘时需要设置权限。
在这里插入图片描述

方法一:最简单的方法就时将默认安装路径设置在D盘或其他C盘[PrgramFilesFolder]以外的位置(参见上述修改默认安装路径),将不存在数据库文件权限问题。当然,你无法保证用户不会手动再将软件安装在“C:\Program Files (x86)”,仅用作测试的话可以暂时这样解决。

方法二:将.mdf数据库文件安装在“AppData”文件夹甚至于“MSSQLLocalDB”文件夹中,在这里数据文件将不受权限问题的困扰。

方法三:采用批处理文件修改数据库文件的权限,(高端操作,未实际尝试。)

方法四:用installshield打包并更改目标文件权限,这是题外话了,未实践。
参考:installshield安装包设置目标文件权限

打包成iso镜像文件(可省略)

安装包生成成功后,可以使用DAEMON Tools Lite虚拟光驱将Setup项目生成的Release文件中的内容打包成一个镜像文件。(需要脱机安装LocalDB及NET Framewok 时这里会自动将安装包也拷贝过来,打包成镜像可以防止误删或漏拷贝。)
制作镜像

打开DAEMON Tools Lite软件,点击“映像编辑器”→“编辑数据”,添加文件后修改大小及格式,点击开始按钮。生成的镜像文件也可用winrar打开或解压缩,双击即可装载到资源管理器DVD驱动,添加AutoRun.inf还可改变DVD驱动器的盘符图标。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐