“安装项目” Step By Step
目录
.NET程序集因为包含了元数据,所以程序集具有自描述性。多数程序自身包含了运行所需要的全部信息,这类程序集就是我们常说的“绿色软件”。对于绿色软件,使用压缩工具制作自解压文件就足以满足我们大多数需要。如果我们构建的是部署比较繁琐的应用程序,或者是希望以一种更为正规的形式来分发软件,我们则可以使用VS内置的“安装项目”模版。“安装项目”常用于安装Windows窗体应用程序以及Windows服务,其基于Windos Installer技术,可以帮助用户在向导的指引下完成程序的部署。
一 基本操作
Step 1:准备应用程序需要的所有外部资源
应用程序常用的外部资源包括配置文件、COM组件、第三方程序集、相关文件等。好的实践是,在项目构建阶段,就创建并维护这样一份依赖性列表。
Step 2:新建安装项目并设置属性
Step 3:定义“生成”方式
进入属性设置对话框,配置安装程序的生成方式及必备组件:
Step 4:设置“文件系统”
打开“文件系统编辑器”,配置安装程序在目标机器中的不同位置如何部署文件及程序集:
通过“文件系统编辑器”,可以在以上3个目录中定制部署涉及的文件及程序集。可以添加的项包括:“文件夹”、“项目输出”(其他项目的所包含的项,如程序集和文件等等)、“文件”、“程序集”。
添加项目输出:
Step 5:设置“注册表”
打开“注册表编辑器”设置目标机器的注册表项和值:
Step 6:建立文件关联
建立文件关联实际上是为某个扩展名映射处理程序,打开“文件类型编辑器”可以设置扩展名与应用程序的映射关系。
1 建立并设置文件类型
2 定义操作
默认定义了一个“打开”操作,该操作也是该类型的默认操作,即当用户双击该类型文件时执行的操作。
操作可以定义多个,默认操作会加粗显示在首行,所有操作都会显示在对应文件的右键菜单中,其显示顺序与定义操作时的排列顺序相同。
Step 7:设置安装程序的用户界面
根据安装方式不同,分为了2组,每组又细分为3个阶段——启动、进度、结束。在简单应用中,我们可以完全使用默认设置,默认预置5个界面,并自动生成的相应属性值。
安装项目每个对话框只能在项目中使用一次,所以我们在使用时,会发现功能相同的对话框但是不同名字。下面显示了VS内置的安装对话框:
1 欢迎使用
2 安装文件夹
3 确认安装
4 进度
5 已完成
6 单选按钮
7 复选框
8 客户信息
9 启动画面
10 文本框
11 许可协议
12 注册用户
13 自述文件
Step 8:添加自定义操作
通过添加自定义操作使我们可以在应用程序安装时执行附加操作,例如:安装数据库,修改配置文件等,可以在安装的某和时间点执行程序集和脚本。(VS内置了“安装程序类”模板,用以定义此处使用的程序集,具体用法见下文。)
打开“自定义操作管理器”,会看到四个阶段,用户可以按需要在各个阶段添加自定义操作。
添加操作后,需要设置操作的属性:
需要注意的是自定义操作最好成对使用,即在“安装”阶段添加的文件,最好在“卸载”阶段进行删除。
Step 9:应用条件部署
“条件部署”就如其名字一样,能根据安装环境选择不同的部署操作,是安装项目中少有的分支操作。但其使用并不够简单直接,其最常用的场景是限制安装程序的安装条件。即在安装程序时检查客户机的安装环境,对不满足要求的客户机执行某个处理。实现条件部署功能由两种方式,分别是“属性方式”和“管理器方式”。
1 通过“Condition”属性实现条件部署
在安装项目中的很多项,都有一个“Condition”属性,用于指定必须满足的Windos Installer条件,以达到在特性条件下的部署需要。在VS中,并没有给出类似WF那样的规则编辑器,条件需要人为键入,其语法比较复杂,也不太常用,如果读者感兴趣请参考MSDN关于“Windos Installer条件语句语法”相关内容的描述。
2 在“启动条件管理器”中实现条件部署
综上所述,VS为我们完成了大量的工作,如果我们没有特殊要求,完全可以跳过很多步骤,我们仅仅需要少量配置即可完成打包。下面,我将分享安装项目的“外挂”功能,以帮助读者打造复杂安装程序。
二 定制安装对话框
在定义安装程序安装界面时,VS为我们内置了多种界面。但对于复杂需求来讲,我们会发现VS提供的安装对话框无法满足当前的需求,此时就需要我们来自定义安装对话框了。遗憾的是该功能不能在VS里操作,而是需要借助“Orca”来完成。Orca是一款由微软提供的用于Windows Installer数据库表的编辑器,是VS附带的工具,但默认不会安装,可以在“\%Program Files%\Microsoft SDKs\Windows\v6.0A\bin”(笔者安装的是VS2008,VS2010的路径与之类似)下找到该工具的安装包。
安装对话框被安装在VS安装目录下的Common7\Tools\Deployment\VsdDialogs子目录,扩展名为wid。打开该目录,看到的是复数个以数字命名的子目录,里面的东西都差不多,它们代表了不同语言版本,其中有三个目录需要注意:第一,“0”目录下的对话框是我们自定义对话框的“基类”,它们是语言中性的;第二,“1033”目录为英语专用;第三,“2052”为中文专用。打开任意子目录,我们可以看到以wid为扩展名的文件,这就是我们在VS中看到的安装对话框。
用Orca打开VsdCustomText3Dlg.wid,可以查看“预置三个文本框的对话框”的相关表设置,如下:
其它表还包括:
- ModuleDialog:定义对话框的现实信息。
- ModuleSignature:定义签名。
- ModuleInstallExecuteSequence:定义了一些操作这些操作将合并到主安装程序的
InstallExecuteSequence中。
- ModuleInstallUISequence:定义了一些操作这些操作将合并到主安装程序的
InstallUISequence
中。
定义对话框的一般步骤如下:
- Step 1:从0目录中,已定义好的对话框中复制一个副本,并用于修改(我喜欢直接用2052的,这样就不用设置语言了)。
- Step 2:用Orca打开原型,通过修改相关表数据,来改变UI界面(具体用法参考示例)。
- Step 3:查看预览效果。
- Step 4:将制作好的对话框文件复制到VS下了对应语言目录。
P.S.经过笔者尝试,使用Ocra定义安装对话框理论上是可行的,但实践中可能只能满足简单需求。笔者曾使用Ocra定义复杂对话框,并陷入相等痛苦的过程,Orca的项目均采用手工输入,且资料有限,使用起来十分困难。所以笔者建议,如果是定义简单对话框,请使用该方法,如果定义负责的对话框,除非对自身能力有足够自信,否则误尝试。
三 安装程序类
在添加自定义操作时,我们可以使用脚本(例如:vbs),但对于大多数人来说,脚本可能比较陌生,安装程序类使我们能够以一种更熟悉的方式定义操作。
自定义安装程序类需要一些步骤:
- Step 1:引用System.Configuration.Install命名空间,定义安装类并继承Installer类。(VS新建项包括“安装程序类”模版。)
- Step 2:为该类声明[RunInstaller(true)]特性。
- Step 3:重写Install类中的方法(包括“安装”、“提交”、“回滚”、“卸载”)。
具体用法请参考MSDN。
四 总结
在实际使用中,对于简单界面我们只需用使用内置的安装对话框即可,如果需要使用与内置对话框类似的,但有少许区别的,可以使用Orca定制对话框,但大多数情况,我们的安装对话框会比较复杂,这时最简单的方法是使用WinFrom窗体。篇幅有限,本文不再赘述具体实例,读者可以参考MSDN或其他技术社区关于“安装时使用自定义操作创建数据库”的相关主题。
“安装项目” Step By Step的更多相关文章
- Step by step Dynamics CRM 2013安装
原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处 SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1
摘要: Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1 安装遇到问题请文末留言. 悦动智能公众号:aibbtcom AI这个概念好像突然就 ...
- 持续交付工具ThoughtWorks Go部署step by step
持续交付工具ThoughtWorks Go部署step by step http://blogs.360.cn/360cloud/2014/05/13/%E6%8C%81%E7%BB%AD%E4%BA ...
- Devops step by step
接着上次分享的devops历程[Followme Devops实践之路], 大家希望能够出一个step by step手册, 那今天我就来和手把手来一起搭建这么一套环境, 演示整个过程! 实验环境需要 ...
- Metrics.NET step by step使用Metrics监控应用程序的性能
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...
- Asp.Net Core 5 REST API - Step by Step
翻译自 Mohamad Lawand 2021年1月19日的文章 <Asp.Net Core 5 Rest API Step by Step> [1] 在本文中,我们将创建一个简单的 As ...
- Linkerd 2.10(Step by Step)—3. 自动轮换控制平面 TLS &Webhook TLS 凭证
Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
随机推荐
- 工作中常用的awk命令
http://man.linuxde.net/awk 1.为一列id加逗号 awk 'BEGIN {ORS=","}{print $1}' test.txt 2.统计一列id中重复 ...
- 希尔伯特矩阵(Hilbert matrix)
例: [ 1 1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5 ] 矩阵的一种,其元素A(i,j)=1/(i+j-1),i,j分别为其行标和列标. 即: [1,1/2,1/3,- ...
- Maven的配置和使用(二)
Maven仓库 使用Maven带给我们一个比较直接的好处是管理jar包,这些jar包默认地址是在C:\Users\用户名.m2 目录下,我们来修改下这个地址: 现在自己想建立的仓库地址的路径下新建文件 ...
- 全局变量 HInstance 到底是在什么时候赋值的?
在学习 资源文件 和 钩子函数 时, 经常用到当前模块句柄(HInstance)这个全局变量. 今天特别想知道, 它到底是在什么时候给赋值的. 输入 HInstance; "Ctrl+鼠标& ...
- 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>
一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...
- javaWeb高级编程(1)
十月 24, 2016 10:41:43 上午 org.apache.catalina.core.StandardContext setPath警告: A context path must eith ...
- 读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题
1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...
- myeclipse中source not found问题解决办法
myeclipse中出现source not found是因为你所引用的JavaEE Generic Library没有关联源码,如下图: 下面给出该问题的解决办法: 步骤一:去下载apache-to ...
- 如何查看bash shell 帮助信息?
man bash 查看bash的命令帮助 info bash 查看bash的文档 help 命令显示bash支持的命令: 如果想看某个命令的帮助可以 help 命令.如 help cd 对bash的命 ...
- dubbo 常见错误
1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...