图解使用VS的安装项目打包程序
背景
这段时间一直在做客户端程序的打包程序,遇到各种坑。因为以前没有任何这方面的经验,历经各种折腾,费尽九牛二虎之力总算是完成了。
虽然没有太多技术含量,但是因为挺繁琐的,所以还是在此记录一下。
由于篇幅原因,先介绍第一阶段:直接使用VS自带的安装项目打包程序。
后面会陆续介绍:自定义安装界面(不适用windows默认风格),使用NSIS脚本制作打包程序。
1. 建立安装项目工程
1.1. 创建工程
首先在 VS中打开你将要打包的项目。我的案例中,我的工程名叫System。
右击解决方案 -> 添加 -> 新建项目,弹出下图的对话框。
我们不妨命名新的安装项目工程名为SetupSystem。

1.2. 设置安装项目属性
选中安装项目工程,在它的属性栏中设置一些参数。
Author——开发者
Manufacturer——软件生产厂商
这两个默认都是署名为微软公司。
ProductName——产品名
Version——发布版本。改动版本号后,UpgradeCode也会随之改变。

1.3. 设置默认安装路径
选中应用程序文件夹,查看其属性栏。
如下图所示,默认的安装路径为:ProgramFiles路径+生成厂商名+产品名。
举例来说,如果按照我上步骤(2)去设置,默认安装路径名就会是:C:\Program Files (x86)\zp\System\。
如果不想显示生产厂商名,可以将[Manufacturer]这个参数删除。

2. 添加安装文件
(1)添加项目输出
在文件系统一栏中有三个路径:应用程序文件夹、用户的“程序”菜单、用户桌面。
应用程序文件夹和安装目录完全对应;用户的“程序”菜单和用户桌面想必不用多解释了吧。
先双击应用程序文件夹,在这里添加安装目录下的内容。
打开右键菜单,点击 添加 -> 项目输出,弹出添加项目输出组菜单。

选中主输出,点击确定。VS自动导入程序的exe文件和程序依赖的DLL文件。

(2)添加资源文件
当然,你可能还需要添加资源文件。
有两种方法:
一种是,打开右键菜单,点击 添加,选择你要添加的文件、文件夹等资源。需要注意的是保持目录结构和你期望的安装根目录结构一致。

还有一种方法更简单,直接复制、拖拽你想添加的资源文件或文件夹到应用程序文件夹中。
3. 添加卸载程序
即在添加你的应用程序项目的时候,多添加一个msiexec.exe进去,这个文件在c:\windows\system32文件夹下。
msiexec.exe这个执行文件用于安装Windows Installer安装包(msi格式的文件)。
4. 创建快捷方式
4.1. 添加快捷方式
右击可执行文件和msiexec.exe为它们添加快捷方式。

在快捷方式的属性栏中,可以在Icon项中为其设置一个ico格式的图标。

4.2. 设置msiexec快捷方式的参数
对于msiexec.exe的快捷方式,需要设置一些参数,才能正常卸载安装的程序。
步骤如下:
选中安装工程,在属性栏中拷贝ProductCode项的值。

然后打开你创建的那个快捷方式的属性对话框,
在Aguements属性中输入"/x {ProductCode}",

安装程序后,打开注册表,可以查看到卸载信息。
以我的机器(64位操作系统)为例,在
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{产品码}可以看到下图信息。
注:如果是32位,应该是HKEY_LOCAL_MACHINE\SOFTWARE\ Microsoft\Windows\CurrentVersion\Uninstall\{产品码}

4.3. 为用户的“程序”菜单和用户桌面添加快捷方式
将执行文件的快捷方式分别拷贝到用户的“程序”菜单和用户桌面。
将卸载程序的快捷方式拷贝到用户的“程序”菜单。
5. 添加依赖项
选中安装项目工程,打开右键菜单,点击属性,弹出属性对话框。
点击系统必备,弹出系统必备对话框。
输出文件名项中可以设置输出文件的路径,安装程序最后会输出到这个路径下。

选中要添加的必备组件,点击确定
注意,安装必备组件有三种方式:
1. 安装的时候会从供应商的官网上下载对应组件。
2. 直接将组件打包到安装程序文件中,省去下载的功夫。
3. 指定一个路径去下载对应组件。

最后,选中安装项目工程,打开右键菜单,点击生成,就会自动生成安装程序了。

生成的安装程序文件如下图


6. 添加注册表
(1) 在“解决方案资源管理器”窗口中选中安装项目,单击鼠标右键,在弹出的对话框中选择“视图/注册表”选项,如图:

(2) 在“注册表”选项卡中,可以在HKRY_CURRENT_USER/Software或HKRY_CURRENT_MACHINE/Software下添加键值,当然节点名也是可以重命名的。
单击鼠标右键,在弹出的对话框中选择“新建/字符串值”选项。
如图:我设置了一个名为key1的键,值为”Hello World”

(4)选中添加的注册表项值,单击鼠标右键,选择“属性窗口”选项,弹出“属性”窗口,如图,这里可以对注册表项的值作修改。
按照以上步骤,就可以为安装程序添加一个注册表项。在程序安装成功后,查看注册表,可以看到到我们写入的键值。

7. 添加、修改安装页面
VS支持对安装程序添加、修改安装页面。但是我在尝试中发现,不够灵活。只能使用默认的样式风格。在这里,我大致的介绍一下。
7.1. 打开用户界面视图
选中安装项目,打开右键菜单,点击 视图 -> 用户界面。

7.2. 添加对话框
在用户界面视图中,选中 启动,打开右键菜单,点击 添加对话框。

选择想要添加的对话框,如下图:

选中一个对话框,还可以调整它的执行顺序。如下图:

至于每个对话框的属性设置,在这里不再赘述,有兴趣的朋友可以自己折腾一下。
参考资料
http://blog.sina.com.cn/s/blog_473b385101019ufr.html
http://jingyan.baidu.com/article/e8cdb32b871eaa37052badd1.html
图解使用VS的安装项目打包程序的更多相关文章
- 利用VS安装项目打包软件的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 昨天摸索了一下,发现使用VS安装项目来打包软件还是挺方便的. 1. 创建一个安装项目工程,如下图: 2. 设置工程属性 ...
- C# winform程序怎么打包成安装项目(VS2010图解)
作为研发人员,在本机上开发的winform.wpf或者控制台程序需要发给其他人测试时候,一般需要对其进行打包生成setup安装文件,根据网上查找的资料并结合自己打包成功,记录如下: 注:本程序是一个利 ...
- C# winform程序怎么打包成安装项目(图解)
1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图) 此主题相关图片如下: 2:安装向导 关闭后打开安 ...
- C# 程序打包成安装项目
Xaml设置图标https://blog.csdn.net/u014234260/article/details/73648649 winform程序控制面板中卸载显示图标https://blog.c ...
- VS2010安装项目程序打包操作详解
(转自:http://blog.sina.com.cn/s/blog_74f702e60101at62.html) 1.打开VS2010,选择 新建项目---其他项目类型---Visual Studi ...
- (转)使用 Advanced Installer 打包 一键安装Web应用程序
使用 Advanced Installer 打包 一键安装Web应用程序 安装预览: 资源下载: 示例安装包 操作流程: 1.新建Asp.net Application. 2.设置 ...
- 使用 Advanced Installer 打包 一键安装Web应用程序
原文:使用 Advanced Installer 打包 一键安装Web应用程序 安装预览: 资源下载: 示例安装包 操作流程: 1.新建Asp.net Application. 2.设置应用程序名称和 ...
- 在打包程序中自动安装SQL Server数据库 .
原文:在打包程序中自动安装SQL Server数据库 . 1.创建安装项目“Setup1”安装项目 在“文件”菜单上指向“添加项目”,然后选择“新建项目”. 在“添加新项目”对话框中,选择“项目类型” ...
- Windows服务项目打包成安装包(Windows服务)-----------VS2017项目程序打包成.msi或者.exe
VS2017项目程序打包成.msi或者.exe Windows服务项目使用VS2017项目程序打包成.msi或者.exe安装包 项目打包成安装包(Windows服务) 1.安装打包插件:Microso ...
随机推荐
- JavaScript Math和Number对象
目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...
- [APUE]标准IO库(上)
一.流和FILE对象 系统IO都是针对文件描述符,当打开一个文件时,即返回一个文件描述符,然后用该文件描述符来进行下面的操作,而对于标准IO库,它们的操作则是围绕流(stream)进行的. 当打开一个 ...
- 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的
我们在<服务器在管道中的"龙头"地位>中对ASP.NET Core默认提供的具有跨平台能力的KestrelServer进行了介绍,为了让读者朋友们对管道中的服务器具有更 ...
- python与c互相调用
虽然python开发效率很高,但作为脚本语言,其性能不高,所以为了兼顾开发效率和性能,通常把性能要求高的模块用c或c++来实现或者在c或c++中运行python脚本来处理逻辑,前者通常是python中 ...
- ASP.NET WebApi OWIN 实现 OAuth 2.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 允许用户提供一个令牌, ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- Twproject Gantt开源甘特图功能扩展
1.Twproject Gantt甘特图介绍 Twproject Gantt 是一款基于 jQuery 开发的甘特图组件,也可以创建其它图表,例如任务树(Task Trees).内置编辑.缩放和 CS ...
- NGINX引入线程池 性能提升9倍
1. 引言 正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为 ...
- 敏捷转型历程 - Sprint3 Planning
我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...
- docker – 你应该知道的10件事
容器并不是一个全新的技术,但这并不妨碍Docker如风暴一样席卷整个世界. 如果你在IT圈里,你一定听说过Docker.就算与其他热门技术,如:Puppet/Chef,Hadoop或者MongoD ...