2018先是发:记一糟糕【Advanced Installer】打包的一起

一、前言

2017年最终几乎天,你们都高高兴兴的跨年,博主还当加班制作.net安装包。因为年前一经出去第一版的安装包,所以博主是加班加点啊。本来想就此VS自带的打工具,不过用过的总人口且了解,真是十分好(tong)用(ku),各种保证得单独生充斥不说,界面也无好看,所以决定弃用之。同事推荐用Advanced
Installer,不过同事呢是殊老不用了,记不起来具体用法。所以博主是边找边前进,所以不免跳上坑里,为了避免后来人越上同的坑里,作文为记的。

好了,不说废话,正文开头!

 

其次、画流程图

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

先是强调一点,我们若先期动手明白我们各个一样步而召开什么,这样连下去当制作安装包时才会条理清晰,有条不紊,不便于犯错。

随我们若判客户机器上是不是安装.net
framework3.5及以上版本,是否安装IIS,是否安装SQL
Server2005及以上版本数据库等等。

自家者类型之流程图如下:

图片 1

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

本节引言:

本节介绍的UI基础控件是:ImageView(图像视图),见称知意,就是之所以来显示图像的一个View或者说控件!
官方API:ImageView;本节讲解的情如下:

  1. ImageView的src属性和blackground的区别;
  2. adjustViewBounds设置图像缩放时是否按长宽比
  3. scaleType设置缩放类型
  4. 绝简便的绘图圆形的ImageView

老三、开始做

来矣流程图,只需要遵循!关于Advanced
Installer的底子因此法,网上发众多的资料,官网也生救助文档,这里就非赘述了。由于要为此到由定义安装包之经过,需要新建对话框,博主用了合作社模板,Advanced
Installer的本子是14.5.2,也是行的本。

1.src属性和background属性的区别:

当API文档中我们发现ImageView有少数独好设置图片的性能,分别是:src和background

常识:

①background习以为常指的还是背景,而src指的是内容!!

②当使用src填入图片时,是本图片大小直填,并莫会见展开拉伸

一旦采取background填入图片,则是会见基于ImageView给定的宽度来展开拉伸

1、选择模板

率先新建模板里面选Enterprise,并择语言(默认为华语),然后创建项目:

图片 2

style=”font-size: 18px; font-family: 宋体;”>Tips2:如果设置包被待由定义对话框,则要选择Enterprise版。

1)写代码验证区别:

写单简易的布局测试下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:id="@+id/LinearLayout1"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:orientation="vertical"  
    tools:context="com.jay.example.imageviewdemo.MainActivity" >  

    <ImageView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:background="@drawable/pen" />  

    <ImageView  
        android:layout_width="200dp"  
        android:layout_height="wrap_content"  
        android:background="@drawable/pen" />  

    <ImageView  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:src="@drawable/pen" />  

    <ImageView  
        android:layout_width="200dp"  
        android:layout_height="wrap_content"  
        android:src="@drawable/pen" />  

</LinearLayout> 

意义图如下:

图片 3

结果分析:

宽高都是wrap_content那就一样,是原图大小,但是,当我们原则性了富裕或者高的话,
差别就显著了,blackground完全填充了一切ImageView,而src依旧是那稀,
而且他放在中了啊,这便涉嫌到了ImageView的另外一个性质scaleType了!
另外还有某些,这里我们说了仅仅设置width或者height哦!加入我们同时设置了
width和height的说话,blackground依旧填充,但是,src的高低或者发生变动啊!
比如,我们测试下下就段代码:

<ImageView  
        android:layout_width="100dp"  
        android:layout_height="50dp"  
        android:src="@drawable/pen" />

运转效果图:

图片 4

PS:scaleType下面会称~


2、设置基本信息

Name即为该装包之名号,公司就是是你所当的合作社啦,还有版本信息等等,这个好简短。

图片 5

2)解决blackground拉伸导致图片变形的道

当前头的机能图被的第二单Imageview中我们好见见图片都深受关伸变形了,
正方形变成了长方形,对于跟自同样来微小强迫症的人数来说,显然是不可承受之,
有没有发办法去装为?答案肯定是有,笔者暂时知道的发生以下简单种办法:

  • 此适用于动态加载ImageView的,代码也日益,只要在抬高View的时节,把大小写好就得了

    LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(48, 48);

        layout.addView(ibtnPen, layoutParam); 
    
  • 除外动态加载view,更多之时光,我们尚是会经过xml布局之办法引入ImageView的
    解决方法吧不麻烦,就是通过drawable的Bitmap资源文件来形成,然后blackground属性设置为该文件即可!
    这个xml文件在drawable文件夹下创办,这个文件夹是只要团结创办的啊!!

pen_bg.xml:

<bitmap  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:id="@id/pen_bg"  
    android:gravity="top"  
    android:src="@drawable/pen"  
    android:tileMode="disabled" >  
</bitmap>

上述代码并不难理解,估计大家最迷惑的凡titleMode属性吧,这个特性是平铺,就是咱们windows设置
背景时的平铺,多单稍图标铺满整个屏幕捏!记得了咔嚓!不记得好可试试!disabled就是把他让禁止了!

就地方就串简单的代码,至于调用方法如下:

动态: ibtnPen.setBacklgroundResource(R.drawable.penbg);

静态: android:background = “@drawable/penbg”


3、设置默认安装路径

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

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

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

[Manufacturer]意味着企业称,这里吧Landsoft。

[ProductName]表示产品名称,这里为LandaV9。

 图片 6

3)设置透明度的问题

说罢前面两独分别,接着再说下setAlpha属性咯!这个特别简单,这个特性,不过发生src时才是有力量的!!


4、设置安装条件

点击Requirements->Launch
Conditions->Software,勾选相应的标准化。这里因流程图所示,我应该勾选.Net
Framework、IIS以及SQL Server。注意这里的格指的是低标准,比如自己这边SQL
Server选的凡2005,即客户机器及应有着2005及以上版本的SQL
Server,如果没有伪装,则会唤起无装SQL2005。

此间还有网规范就要求客户机器是win7还是winxp等等。如果还有再多的规则,Custom里面可以自定义。

 图片 7

4)两者结合妙用:

网上的等同布置图:

图片 8

同等看去是一个简约的GridView,每个item都是一个ImageView,但是仔细之汝或许发现了,
上面的ICON都不是规则之,而是圆形,圆角矩形等等,于是乎这里运用了src +
background了! 要实现上述的作用,你就需要少单操作: 招来一张透明的png图片
+
设置一个黑色的背景
 (当然你呢得以设置png的透明度来贯彻,不过结果可能与预期的来出入哦!)
我们描绘单简易例子:

图片 9

比方图,呆萌呆萌的略微猪就这么显示到ImageView上了,哈哈,blackground设置了蓝色背景!

心想事成代码:

<ImageView  
    android:layout_width="150dp"  
    android:layout_height="wrap_content"  
    android:src="@drawable/pig"  
    android:background="#6699FF" /> 

PS:
当然你吗可以用selctor实现点击效果,设置不同之情事设置不同的图纸,以落实点击或者触摸功能!


5、添加文件或者文件夹

点击Resources->Files and
Folders,在Application Folders上右键,选择Add Folder或者Add
Files,这里我加加了5单公文夹,用于后续操作。

图片 10

5)Java代码中设置blackground和src属性:

前景(对应src属性):setImageDrawable( );
背景(对应background属性):setBackgroundDrawable( );


6、自定义对话框(Dialog)

新建对话框之前可当Themes中甄选主题和体制。

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

下一场我们只是机关在方定义内容:

图片 11

新建对话框后,可以拖来安装过程中dialog的外观,这个对我们.Net开发人员来说,应该是聊Case吧,看一下功力:

图片 12

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

图片 13

style=”font-size: 18px; font-family: 宋体;”>Tips3:文本框中的属于性名,不要涂改。如果改动会生特别问题,至于什么问题,后面再说!

鉴于我们用设置连接字符串,所以待客户设置数据库的相关消息:

选料Add
Dialog后,在弹出框中精选SQLServerConnentionDlg

图片 14

功用如下:

图片 15

最后还新建一个会话框,用于部署项目到IIS所急需之原则:

图片 16

平等好设置网站称以及端口号:根据流程图,这里的默认值需要各自安装也Mango和8001,用户可自动修改。

顶此处新建对话框告一段落。

2.adjustViewBounds设置缩放是否保存原图长宽比

ImageView为咱提供了adjustViewBounds性,用于安装缩放时是否保持原来图长宽比!
单独设置不起作用,需要相当maxWidthmaxHeight性能一起使用!而后面就有限个属于性
也是内需adjustViewBounds为true才会生效的~

  • android:maxHeight:设置ImageView的最为充分高度
  • android:maxWidth:设置ImageView的极致要命幅面

代码示例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!-- 正常的图片 -->
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5px"
        android:src="@mipmap/meinv" />
    <!-- 限制了最大宽度与高度,并且设置了调整边界来保持所显示图像的长宽比-->
    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5px"
        android:adjustViewBounds="true"
        android:maxHeight="200px"
        android:maxWidth="200px"
        android:src="@mipmap/meinv" />

</LinearLayout>

运行效果图:

图片 17

结果分析: 大的不可开交图片是从未另外处理的图形,尺寸是:541*374;而下的异常的语句我们由此maxWidth和maxHeight

7、设置一定填验证

纵使将地方这个对话框为条例,虽然咱安的有默认值,但是客户以装置过程遭到莫小心给删掉了,又从未填写,恰巧又触及了产一致步,这样的话,安装过程被见面来题目。所以我们若做一定填验证,即文本框中无价值,则“下同样步”按钮无可用,有价才可用。

之所以选择“下同样步”,关注人世的“Control
Conditions”:

 图片 18

点击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。即都填内容了,则按钮可用。这样便对控件做了一定填验证。是匪是好简短吗!

图片 19

 

界定ImageView最可怜幅面和高度也200px,就是无与伦比多只能显示200*200的图样,我们又装了一个 **adjustViewBounds

“true”*调整我们的鄂来保持图片的增长宽比,此时之ImageView宽高为是128\200~


8、设置桌面快捷方式

因流程图所示,安装完毕晚,需要在桌面生成快捷防方式。所以接下,我们就来举行就起事:

图片 20

先是到Files and Folders选项卡,在Application
Shortcut Folder上面右键 选择“New Shortcut”,弹出如下界面:

图片 21

 

于这框里主要安装快捷方式的Name和讲述和图标(这个图标,可以选择.exe文件)。点击OK,就会当Application
Shortcut Folder中形这样平等修信息。

图片 22

唯独先别急,如果单单是这样的话,快捷方式是不起作用的。因为我们还尚无设置快捷方式对应之可执行文件。

双击这漫长消息,在弹出的对话框中装置Shortcut
Target。

图片 23

观望这,肯定有人发疑难?既然这样怎么不在增产快捷方式的时光一起设置也?

以以新增的下,Shortcut
target这个文本框中的内容未可知改改。这个非常坑爹,博主也跃跃欲试了漫长才试行出的。

末尾,将此消息拖到Desktop里面即可,安装完毕后,就会见当桌面显示是快捷方式。

图片 24

3.scaleType安装缩放类型

android:scaleType用于安装显示的图片如何缩放或者移动为适应ImageView的大大小小
Java代码中可通过imageView.setScaleType(ImageView.ScaleType.CENTER);来设置~
可选值如下:

  • fitXY:对图像的横向和纵向进行单独缩放,使得该图片完全适应ImageView,但是图的横纵比可能会见有变更
  • fitStart:保持纵横比缩放图片,知道较丰富的限度与Image的编程相等,缩放完成后拿图片在ImageView的左上角
  • fitCenter:同齐,缩放后放为中;
  • fitEnd:同齐,缩放后放于右下角;
  • center:保持原图的分寸,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理。
  • centerCrop:保持横纵比缩放图片,知道完全覆盖ImageView,可能会见产出图的显得不净
  • centerInside:保持横纵比缩放图片,直到ImageView能够统统地显示图片
  • matrix:默认值,不转原图的深浅,从ImageView的左上角开始绘制原图,
    原图超过ImageView的片段作裁剪处理

连片下我们一组组的来对比:


季、设置IIS网站的网站名为、端口号

当上头对话框的末梢一步着,我们记住网站称的和端口号的文本框的属性名,然后至IIS选项卡中:

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

每当Basic Pool
Settings中安装程序池的开行模式吗连启动,勾选立即启动程序池复选框,framework版本选择吧4.0,托管模式选择啊集成。

图片 25

以Identity中安装应用程序池表示也ApplicationPoolIdentity。

图片 26

应用程序池设置好后,再来装站点:

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

图片 27

 

在Bindings/SSL中安端口号,IP地址选择一切不分配。

图片 28

 

当Application
Pool中精选刚刚新建的应用程序池。

图片 29

暨此IIS这等同片就设置好了。

安过程被,Advanced
Installer就会见活动的将网站部署好。这个实在是蛮牛生强大!不得不佩服人家做的即是好!

1)1.fitEnd,fitStart,fitCenter

此为fitEnd为条例,其他两单近乎:

以身作则代码:

<!-- 保持图片的横纵比缩放,知道该图片能够显示在ImageView组件上,并将缩放好的图片显示在imageView的右下角 -->
    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="fitEnd"
        android:src="@mipmap/meinv" />

运行效果图:

图片 30


五、两种植方式设置config文件

2)centerCrop与centerInside

  • centerCrop:按横纵比缩放,直接了盖任何ImageView
  • centerInside:按横纵比缩放,使得ImageView能够完全展示是图形

以身作则代码:

<ImageView
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="centerCrop"
        android:src="@mipmap/meinv" />

    <ImageView
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="centerInside"
        android:src="@mipmap/meinv" />

运作效果图:

图片 31


1、直接在Advanced Installer中设置

当增长文书的下,如果出xml类型的文本,会发出这般的提示:

图片 32

此刻我们勾选需要修改配置的文本,点击ok,这样就是好一直在Advanced
Installer中改。

找到需要改的节点,直接发生文本框的性质替换掉就足以:

图片 33

然,在安过程遭到即使见面用config文件中之应和的节点替换为客户输入的值。

尚记Tips3吧?我们说罢如改动文本框的属于性名之后,那么这样设置后,config中的价不见面设置也客户输入的值,会尽是文本框中设置的默认值。

切记切记!!!重要的业务三只叹号!

3)fitXY

未循比例缩放图片,目标是拿图纸塞满整个View

示范代码:

<ImageView
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="fixXY"
        android:src="@mipmap/meinv" />

运转效果图:

图片 34

吓吧,明显扁了=-=~


2、使用于定义之dll文件

有关这点要见第六小节。

4)matrix

打ImageView的左上角开始绘制原图,原图超过ImageView的有的作裁剪处理

演示代码:

<ImageView
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="matrix"
        android:src="@mipmap/meinv" />

运转效果图:

图片 35


六、自定义dll

点击Custome
Behavior->Custom Actions,选择.Net Installer Class
action。这时会吃你选择文件被之dll文件。

图片 36

理所当然矣,在此之前,请打开你的Visual
Studio,新建一个类库项目,这里命名也InstallLandaV9ServiceT,然后新建一个安装程序类,重写Install方法。

至此处,我们事先暂停一下,问一下要好:在程序中怎么收从Advanced
Installer传过来的参数为?

假定这我们早就以这个dll加入到Advanced
Installer中,在Installer Class Paramters中可以加上参数。

图片 37

按以文件路径传回后台,可以这么丰富: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);
}

如此就算无问题了!

于此程序集里面可以由定义你想做的别作业,比如,还原数据库等等。

5)center

保障原图的分寸,显示在ImageView的着力。当原图的size大于ImageView的size,超过部分裁剪处理。

示范代码:

<ImageView
        android:layout_width="300px"
        android:layout_height="300px"
        android:layout_margin="5px"
        android:scaleType="center"
        android:src="@mipmap/meinv" />

运转效果图:

图片 38


七、后记

此次教程到此结束,这也是博主于即时几乎上假日摸索出来的,如果发不当之处,尽请指正!

蹭Advanced
Installer的官网地址:https://www.advancedinstaller.com/。

想本文对君抱有助。如果您当本文能够拉你,就点个赞吧。你的支撑是博主继续坚持的不懈动力。

4.绘制圆形的ImageView

信任大家对环或圆角的ImageView不陌生吧,现在成千上万的APP都大喜欢周的头像是吧~

实质上项目之话语可以设想用Github上牛人形容的控件,比如下面就半单:

RoundedImageView

CircleImageView

 

文章参考自:http://www.runoob.com/w3cnote/android-tutorial-imageview.html