SQL Server2018首首发:记五回【Advanced Installer】打包之旅

一、前言

二零一七年最终几天,你们都欣然的跨年,博主还在加班制作.net安装包。因为年前要出来第一版的安装包,所以博主是加班加点啊。本来想用VS自带的打造工具,可是用过的人都知晓,真是要命好(tong)用(ku),各个包需要独自下载不说,界面也不美观,所以决定弃用之。同事推荐用Advanced
Installer,可是同事也是很久不用了,记不起来具体用法。所以博主是边查找边前进,所以不免跳进坑里,为了防止后来人跳进同样的坑里,作文以记之。

好了,不说废话,正文起先!

二、画流程图

俗话说的好,“磨刀不误砍柴工”!

首先强调一点,我们要先弄通晓我们每一步要做哪些,这样接下去在打造设置包时才能条理清晰,有条不紊,不易于犯错。

例如我们要认清客户机器上是否安装.net
framework3.5及以上版本,是否安装IIS,是否安装SQL
Server2005及以上版本数据库等等。

本身这么些类此外流程图如下:

SQL Server 1

style=”font-size: 18px; font-family: 宋体;”>Tips1:开端此前最好先画流程图

三、起始制作

有了流程图,只需按照!关于Advanced
Installer的基本功效法,网上有无数的资料,官网也有援助文档,这里就不赘述了。由于要用到自定义安装包的经过,需要新建对话框,博主用了商家模板,Advanced
Installer的版本是14.5.2,也是最新的本子。

1、采用模板

率先新建模板里面采用Enterprise,并精选语言(默认为华语),然后成立项目:

SQL Server 2

style=”font-size: 18px; font-family: 宋体;”>Tips2:假若安装包中需要自定义对话框,则需要选取Enterprise版。

2、设置基本音讯

Name即为该安装包的名号,公司就是您所在的铺面啦,还有版本音信等等,那个很简短。

SQL Server 3

3、设置默认安装路径

点击Package
Definition->Install Parameters,填写默认安装路径。

Application
folder默认的内容是这么:“[ProgramFilesFolder][Manufacturer]\[ProductName]”,
这一个情节表示安装时默认的安装路径:

[ProgramFilesFolder]代表文件夹,那里为D:\Program
Files(x86)。

[Manufacturer]表示公司名称,这里为Landsoft。

[ProductName]意味着产品名称,这里为LandaV9。

 SQL Server 4

4、设置安装条件

点击Requirements->Launch
Conditions->Software,勾选相应的准绳。这里遵照流程图所示,我应该勾选.Net
Framework、IIS以及SQL Server。注意那里的规范指的是最低标准,比如自己那里SQL
Server选的是2005,即客户机器上理应有着2005及以上版本的SQL
Server,假设没有装,则会唤起没有设置SQL2005。

此地还有系统标准化即要求客户机器是win7依旧winxp等等。假诺还有更多的标准,Custom里面能够自定义。

 SQL Server 5

5、添加文(加文)件或文件夹

点击Resources->Files and
Folders,在Application Folders上右键,选用Add Folder或者Add
Files,这里自己添加了5个文本夹,用于后续操作。

SQL Server 6

6、自定义对话框(Dialog)

新建对话框从前可以在Themes中挑选要旨和体裁。

点击User
Interface->Dialogs,在FolderDlg上右键,选取Add Dialog是添加Advanced
Installer中自定义的对话框,选用New Dialog是骤增一个空的对话框,

下一场大家可自动在上头定义内容:

SQL Server 7

新建对话框后,可以拖出安装过程中dialog的外观,这多少个对于我们.Net开发职员来说,应该是小Case吧,看一下职能:

SQL Server 8

可以对文本框设置默认值:

SQL Server 9

style=”font-size: 18px; font-family: 宋体;”>Tips3:文本框中的属性名,不要改动。假若改动会有大问题,至于何以问题,前边再说!

鉴于大家需要安装连接字符串,所以需要客户设置数据库的有关信息:

接纳Add
Dialog后,在弹出框中采纳SQLServerConnentionDlg

SQL Server 10

功效如下:

SQL Server 11

最终再新建一个会话框,用于部署项目到IIS所急需的基准:

SQL Server 12

无异于可以安装网站名称和端口号:依照流程图,这里的默认值需要各自设置为Mango和8001,用户可以自动修改。

到这里新建对话框告一段落。

7、设置必填验证

就拿地方这一个对话框为例,尽管大家设置的有默认值,可是客户在装置过程中不小心给删掉了,又没有填写,恰巧又点了下一步,这样的话,安装过程中会有题目。所以大家要做必填验证,即文本框中从未值,则“下一步”按钮不可用,有值才可用。

之所以采取“下一步”,关注人世的“Control
Conditions”:

 SQL Server 13

点击New按钮在新弹出的界面中在Condition中填入“NOT
EDIT_1_DROP OR NOT EDIT_1_DROP_1”,在Action中选择Disable。

EDIT_1_DROP和EDIT_1_DROP_1就是网站名称和端口号,后面加NOT的趣味就是,假如那两个文本框中随机一个并未填写,则按钮不可用(Disable)。

同理再添加一个“EDIT_1_DROP AND
EDIT_1_DROP_1”,在Action中挑选Enable。即都填内容了,则按钮可用。这样就对控件做了必填验证。是不是很粗略吗!

SQL Server 14

 

8、设置桌面快速模式

按照流程图所示,安装完毕后,需要在桌面生成急迅防格局。所以接下去,我们就来做这件事:

SQL Server 15

第一来到Files and Folders选项卡,在Application
Shortcut Folder上边右键 选拔“New Shortcut”,弹出如下界面:

SQL Server 16

 

在那些框里首要安装迅速形式的Name和描述以及图标(这么些图标,可以拔取.exe文件)。点击OK,就会在Application
Shortcut Folder中突显这样一条信息。

SQL Server 17

而是先别急,如若单单是这样的话,急迅模式是不起成效的。因为大家还不曾安装连忙形式对应的可执行文件。

双击那条音信,在弹出的对话框中安装Shortcut
Target。

SQL Server 18

看来这,肯定有人有问号?既然这样怎么不在新增快捷情势的时候共同设置呢?

因为在增产的时候,Shortcut
target那一个文本框中的内容不可以修改。那个很坑爹,博主也试了绵绵才试出来的。

末了,将那多少个音讯拖到Desktop里面即可,安装收尾后,就会在桌面呈现这多少个连忙模式。

SQL Server 19

四、设置IIS网站的网站名、端口号

在上边对话框的末尾一步中,我们铭记网站名称的和端口号的文本框的属性名,然后来到IIS选项卡中:

率先新增一个用到程序池,名称即为网站名称文本框的属性名,这里为EDIT_1_PROP,在Advanced
Installer里面,使用中括号[]将控件的习性名括起来表示变量的概念。

在Basic Pool
Settings中装置程序池的启动格局为连日来启动,勾选顿时启动程序池复选框,framework版本选用为4.0,托管格局选拔为集成。

SQL Server 20

在Identity中安装使用程序池表示为ApplicationPoolIdentity。

SQL Server 21

运用程序池设置好之后,再来设置站点:

新建一个站点名称一致为EDIT_1_PROP,在Basic
Site Setting中装置Name和文书路径。

SQL Server 22

 

在Bindings/SSL中安装端口号,IP地址采用一切未分配。

SQL Server 23

SQL Server, 

在Application
Pool中精选刚刚新建的采取程序池。

SQL Server 24

到这里IIS这一块就设置好了。

安装过程中,Advanced
Installer就会自动的将网站部署好。这几个确实是很牛很有力!不得不叹服人家做的就是好!

五、二种办法设置config文件

1、直接在Advanced Installer中设置

在充分文书的时候,假如有xml类型的文件,会有那样的唤醒:

SQL Server 25

这儿我们勾选需要修改配置的文件,点击ok,这样就能够一直在Advanced
Installer中修改。

找到需要修改的节点,直接有文本框的属性替换掉就足以:

SQL Server 26

这么,在装置过程中就会将config文件中的相应的节点替换为客户输入的值。

还记得Tips3吗?大家说过假如改动文本框的属性名之后,那么如此设置之后,config中的值不会安装为客户输入的值,会始终是文本框中装置的默认值。

记住切记!!!首要的政工四个叹号!

2、使用自定义的dll文件

有关这一点请见第六小节。

六、自定义dll

点击Custome
Behavior->Custom Actions,选取.Net Installer Class
action。这时会让您拔取文件中的dll文件。

SQL Server 27

自然了,从前,请打开你的Visual
Studio,新建一个类库项目,这里命名为InstallLandaV9Service(Service)T,然后新建一个装置程序类,重写Install方法。

到此地,大家先暂停一下,问一下谈得来:在程序中怎么接收从Advanced
Installer传过来的参数呢?

如若此时大家早就将以此dll参预到Advanced
Installer中,在Installer Class Paramters中可以加上参数。

SQL Server 28

例如将文件路径传回后台,可以如此丰盛:Name为FilePath,Value为[APPDIR]\。

这里有地方需要小心,传递文件路径时,Value为[APPDIR]\,这个”\”请不要漏掉了。

style=”font-size: 18px; font-family: 宋体;”>Tips4:传递文件路径时,Value为[APPDIR]\,这个”\”请不要漏掉了。

另外参数的Value,需要安装为相应文本框的性能名称,格式为:[属性名]。

下面来看一看代码:

public override void Install(IDictionary stateSaver)
{
    Parameters configParms = new Parameters();
    configParms.FilePath = Context.Parameters["FilePath"];
    configParms.ServerPath = Context.Parameters["ServerPath"];
    configParms.ClientPath = Context.Parameters["ClientPath"];
    configParms.DataSource = Context.Parameters["DataSource"];
    configParms.UserId = Context.Parameters["UserId"];
    configParms.Password = Context.Parameters["Password"];
    new Operators().UpdateLandaV9Config(configParms);
    base.Install(stateSaver);
}

此地关键采取从Advanced
Installer中传过来的参数,接着在Operators类中更新配备文件。

还记得Tips3啊?假如在那边修改的属性名,那么这里接受的参数也是文本框的默认值。

那其中首要干了三件事,获取连接字符串,更新连接字符串,安装服务

public void UpdateLandaV9Config(Parameters configParms)
{
    string filePath = Path.Combine(configParms.FilePath, "LandaV9Service", "LandaEntryInfoService.exe.config");
    string connectionString = this.GetConnectionString(configParms);
    this.UpdateConnections(filePath, connectionString);this.InstallService(Path.Combine(configParms.FilePath, "LandaV9Service"));
}

还记得Tips4吧?如果在传递文件路径的时候只是写[APPDIR],而不是[APPDIR]\,那么程序运行到这边的时候,会抛“FileNotFound”相当!

下来来看一下有血有肉的代码:

/// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="op"></param>
/// <returns></returns>
public string GetConnectionString(Parameters op)
{
    return string.Format("Data Source={0};Initial Catalog=LandaEntryManager;Persist Security Info=True;User ID={1};Password={2}", op.DataSource, op.UserId, op.Password);
}

/// <summary>
/// 更新连接字符串
/// </summary>
/// <param name="filePath"></param>
/// <param name="conn"></param>
public void UpdateConnections(string filePath, string conn)
{
    XmlDocument xmlDocument = new XmlDocument();
    xmlDocument.Load(filePath);
    XmlElement xmlElement = (XmlElement)xmlDocument.SelectSingleNode("/configuration/connectionStrings/add[@name='LandaEntryManager']");
    if (xmlElement != null)
        xmlElement.SetAttribute("connectionString", conn);
    xmlDocument.Save(filePath);
}

再来看安装服务:

/// <summary>
/// 安装服务
/// </summary>
/// <param name="filePath"></param>
public void InstallService(string filePath)
{
    Environment.CurrentDirectory = filePath;
    Process process = new Process();
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.FileName = "Install.bat";
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.Verb = "runas";  //主要设置为以管理员启动
    process.Start();
}

有安装就有起步,不过一旦紧跟其后写启动服务,会唤起找不到服务,安装程序就会出错。

博主想了一个方法,重写OnAfterInstall方法,在这多少个措施里面写启动服务:

/// <summary>
/// 重启服务
/// </summary>
/// <param name="savedState"></param>
protected override void OnAfterInstall(IDictionary savedState)
{
    ServiceController serviceController = new ServiceController("LandaInformationServiceV9");
    serviceController.Start();
    base.OnAfterInstall(savedState);
}

如此这般就没问题了!

在这个程序集里面可以自定义你想做的其他业务,比如,还原数据库等等。

七、后记

此次教程到此截止,这也是博主在这几天假日寻觅出来的,若是有不当之处,尽请指正!

依附Advanced
Installer的官网地址:https://www.advancedinstaller.com/

愿意本文对您具备匡助。即使你以为本文可以襄助您,就点个赞吧。你的支撑是博主继续坚定不移的不懈动力。

相关文章