前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件打包安装软件小记

软件打包安装软件小记

原创
作者头像
谭广健
发布2022-11-26 11:10:02
1.2K0
发布2022-11-26 11:10:02
举报
文章被收录于专栏:谭广健的专栏谭广健的专栏

最近开发了一个WinForm软件,为了更加高大尚尝试做了个打包安装的包装。因为以前直接编译,然后交给用户使用,基本也是平平安安的;但后来这样体现不了成熟软件的高大尚,那好吧就弄个一键安装部署的。本来在第一次选型选了NSIS (Nullsoft Scriptable Install System) ,功能比较强大,但发现这个太基于代码了,要学习的成本比较高,所以还是寻觅其他的。后来发现还是Setup Factory,这个中规中矩吧。没有太多花俏的功能,就简单的Next,Next,Finish.但如果这么简单也不会有这篇文章了。

这文章的重点来了,我这个WinForm软件自带比较强的后台服务属性,安装后需要进行服务注入和服务启动;所以如果简单的Next,Next,Finish,用户还要操作一大堆工作,那怎么办好呢?只好在安装时由安装软件进行自动后台安装。首先要面对的是根据安装的目前对Sqllite的数据库地址进行指引,就是说用户选择安装目录后,安装软件会自动修改软件的ini配置文件,指定相关地址,那怎么写呢?看了一圈E文API后发现Setup Factory有这个功能。就是INIFile这个,这个有读取、删除、和写入。写入如下

代码语言:javascript
复制
INIFile.SetValue(SessionVar.Expand("%AppFolder%\\配置文件.ini"), "数据库设置", "分拣数据库位置",SessionVar.Expand("%AppFolder%\\DB.db"));

这样解决了因为用户选择目录而导致配置数据库地址的问题,接下来就是服务的注入。这个好在我是写一个程序,只需要在将程序注入到服务可以了,于是我用了Shell.Execute这个API,这个就是用来执行文件的。

代码语言:javascript
复制
Shell.Execute(SessionVar.Expand("%AppFolder%\\后台服务.exe"), "open", "install", "", SW_HIDE, false);

这里的后台服务.exe就是我的服务程序,install就是安装,后面的SW_HIDE和False分别是隐藏窗口和不用等待(异步)。当然这样还不行,还有让它启动,这个也是一样。

代码语言:javascript
复制
Shell.Execute(SessionVar.Expand("%AppFolder%\\后台服务.exe"), "open", "start", "", SW_HIDE, false)

但又遇到一个问题,就是服务还没注入成功就直接启动服务,这样明显不行的,怎么办呢?好在这时发现有一个等待函数

代码语言:javascript
复制
Application.Sleep(800);

这样就让它等待800秒再执行。

好了,万事具备就找个位置执行这些代码,放哪里好呢?放在开始肯定不行,因为文件还没复制完,所以根本不会执行,所以只能安装完成。于是我放在安装后和安装成功展示画面前。。这样就顺利地搞掂了。。

最后说一下吧,Setup Factory作为一个老牌的安装打包软件的确不错,它比较四平八稳,但就是没有太多花俏的功能。国产也有很多安装打包的软件功能也不错,但一些花俏的功能就收费了。这个自己衡量吧。

本篇也到此为止,最后多谢你的阅读。这篇也不小心的变成我这里的第100篇原创文章。。可喜可贺

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档