[C#打包部署教程]001.VS2012 + InstallShield
攻城狮编写测试完成后接下来我们要做的是打包部署程序。
经过翻阅资料发现,VS2012虽然没有集成打包工具,但它为我们提供了下载的端口,需要我们手动安装一个插件InstallShield。(旁白:网上有很多第三方的打包工具,但为什么偏要使用微软提供的呢?因为最原始的也是最高级的,万变不离其宗。)
InstallShield下载地址:http://download.csdn.net/download/ace_color/8396859 (非SD,找了很久终于找到了一个可用的!:-)
一、.NET程序部署机制
在.NET程序包下有三个文件夹分别是bin文件、obj文件、My Project文件,他们分别封存着程序的组成部分。
bin目录用来存放程序的编译结果,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,在编译后生成的程序文件会存放在该目录下。当然我们也可以手动修改程序的输出路径,修改方法:
项目属性—>配置属性—>输出路径
来修改。
obj目录是用来保存每个模块的编译结果, 用来放置程序生成时的中间文件。程序不会直接生成出可用的文件,而是由源程序生成中间文件,再编译中间文件生成可执行文件的。在.NET中,编译是分模块 进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存 每个模块的编译结果,用来加快编译速度。是否采用增量编译,可以通过:
项目属性—>配置属性—>高级—>增量编译
来设置。
My Project目录定义你程序集的属性,被称为项目属性文件夹。目录下的DLL、EXE、Config等的程序的组件,有了程序的组件程序就能够正常运行。所以在发布制作安装程序时我们只需要将程序的组件打包即可。
二、InstallShield程序打包图解
VS2012中打包工具被看做程序集,在使用时和程序集一样被创建到程序解决方案下。需要我们做的是添加项目即可。但是对于初次使用的朋友来说,我们需要根据提示一步步的先下载安装该打包工具。具体的安装方法不再详述,网上资料很多 。
1、设置安装程序集
InstallShield安装完成后,执行以下步骤 右键解决方案-->添加-->新建项目-->其他项目类型-->安装和部署,具体操作如下图:

2、发布程序
在继续往下操作前一定要选择发布,在启动项目的属性内设置发布文件夹默认路径设置为安装系统的文件夹。

3、设置程序安装信息
Application Information主要设置程序在安装时显示的有关程序的一些信息,如:程序的开发者、程序开发公司,程序安装图标和程序简介等。


4、添加程序文件
在下图中的第四步中添加程序文件时会有主输出、源文件等多个选项框,其实它的生成机制和.NET程序的编译机制是相同的。下图中的第五部显示出的UI.主输出,在生成安装文件后程序包中包含了与UI层进行交互引用的其它层的引用文件,但不会生成和UI层(启动层)没有相连的组件,我们只能通过手动添加。

5、添加程序的资源文件
程序源文件是程序运行的资源文件,也包含了程序的源码文件。如果不需要打包源文件的话,这步可以省略。

6、设置安装注册文件
如果开发的程序中使用了第三方控件,这时在安装时往往需要注册到目标系统中,同样Install也为用户提供了此功能。Install能够通过设置dll文件或OCX文件的注册,首先要添加注册的文件,然后通过设置文件的安装属性来指定注册与否,设置如下图。


7、设计程序的打开方式
Application Shortcuts 程序快捷打开方式,Install为用户提供了两种显示形式,分别是Win菜单和桌面。下图显示了设置的一些注意项,此阶段也可以设置程序的显示图标。

8、设置程序安装注册表项
一般的应用程序在安装时不需要考虑程序的注册表项,此步骤可以不用设置。

9、设置程序安装时的安装视图
根据自己的需要进行设计即可。


10、打包环境
设置完上面的步骤后,我们的打包程序基本设置完成,但是在一些情况下我们往往要打包.net环境或者其它程序运行所需要的Windows环境,Install也为我们很好的设计了环境的打包。
在选择需要打包的环境时一定要注意文件的名称,一般往往是需要直接将环境安装包放到安装exe中这时我们要选择名称为Client的文件,如我想要 将.NET Framework 4.0的完成安装包集成到exe中,这时我要选中Microsoft .NET Framework 4.0 Clinet然后等待Vs将该环境的安装包下载到程序集文件夹中即可。另外一定要注意名称后面的(Web Download)括号的内容说明文件只是一个链接,在安装时需要网络下载才可以实现完成安装。

11、发布程序
上面的安装步骤执行完成后即可生成解决方案,但是生成的文件会 放在DVD-5文件夹内,想要使用安装文件的话就必须拷贝整个文件夹否则安装会出错,这样内容很繁琐,而且给客户的安装体验度也很差,那应该有其它的解决 办法吧,是的,如下图所示,我们将使用SingleImage的安装包,将所有文件集成到一个Setup.exe中,再次安装的时候只需要一个 Setup.exe即可。


如果我们的安装文件内没有打包程序运行环境那上面的操作步骤就完全可以满足只需要一个Setup.exe即可的要求了,但如果需要将安装环境打包到Setup.exe中的话还必须要经过下图的步骤。

好了设置完成后,接下来就是生成解决方案了或者是只生成单个程序集,这时候安装文件就只有一个setup.exe了,如下图。

操作完上述步骤后,程序打包基本设置已经完成,接下来要做的就是生成解决方案。生成解决方案后会在安装程序集下面生成一个名为Setup的文件夹,安装文件就保存在下面的目录中。Install在生成安装文件后会有Setup.exe和.msi两中安装文件,exe文件是安装的引导文件,核心文件是msi文件,里面封存了程序的组件。在里面找到Setup.exe文件及msi文件即可进行安装。
最后还要强调一点,Install打包工具中并没有继承中文环境,在它的底层语言库中没有中文语言,所以解决方案、程序集名称等涉及到与主输出相关的文件最好不要以中文名命名,否则会出现如下的错误:“ -7184: The FileName column of the File table includes characters that are not available on code page 1252”,该错误是在说明在代码段1252处没有发现和文件名相关的语言库。
万变不离其宗,微软的Install程序打包工具虽然使用时较繁琐,但原始的就是最高级的,其它的打包工具和它相比也差不到哪儿去。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4632746.html
[C#打包部署教程]001.VS2012 + InstallShield的更多相关文章
- [C#打包部署教程]002.VS2012 + Dotfuscator
前言: C#程序界流传着一句古话:"成也Reflector,败也Reflector!" C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一 ...
- VS2012打包部署教程
前言 通常我们只是写一些系统,然后想要运行功能的时候就打开代码点击启动,这样只适用于开发人员或者局部开发人员这样做,软件开发的大多数意义上就是拿出开发的软件让用户放心的去点.用户无需知道代码,无需知道 ...
- VS2012打包Winform教程 [转]
VS2012打包部署Winform程序 打包前的准备工作: 里边会提到第一次使用的时候打开网页填数据什么的..最终要下载一个EXE文件..其实大可不必.. 直接百度InstallShield2012S ...
- 【转】VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- [转载]VS2012程序打包部署详解
上篇博客把收费系统的总体设计进行了一遍讲解,讲解的同时掺杂了些有关.NET编译机制的总结.程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因 ...
- (转) VS2012程序打包部署详解
程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的是没有了打包工具.不知道出于什么原因微软没有将打包工具集成在开发环境中,但是我知道总会有解决办法的. 经过翻阅资料发现 ...
- VS2012及以上版本 程序打包部署详解
引用: http://blog.csdn.net/zhang_xinxiu/article/details/9099757 程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的 ...
- VS2012打包部署Winform程序
打包前的准备工作: 新建一个打包部署项目,点OK,如果是第一次使用的话,会打开一个网页,按照提示的步骤来做, 点击上面的step2的网址,进入到另一个网页: 填写完右边的信息,点击“download ...
- VS 2013 打包程序教程
简述 如果你只是想要在他人的机子上运行你的程序而不想安装,有一种简单的方法,只要使用本教程的“步骤—3.生成Release 文件夹”即可.但是有一点需要注意,如果你在程序中调用了其他的dll,那么你需 ...
随机推荐
- 写给Android 混淆小白的快速混淆方法
为啥子要混淆 简单来说,Android 进行ProGuard,可以起到压缩,混淆,预检,优化的功能,虽然不能说更安全但还是一个不容忽视的环节. 开始混淆第一步 首先在build.gradle 中将混淆 ...
- libevent(三)event_base
libevent能够处理三种事件: I/O.定时器.信号. event_base 统一管理所有事件. struct event_base { const struct eventop *evsel; ...
- schedule定时任务出现问题 (大坑已填)!!
因为python每次运行完,并不清除内存,nowtime一直不变,这导致了一个致命问题,使我的脚本一直运行失败,具体如下: 我设置的是每隔30分钟登陆一次,代码如下 if __name__ == &q ...
- Qt源码解析之-从PIMPL机制到d指针
一.PIMPL机制 PIMPL ,即Private Implementation,作用是,实现 私有化,力图使得头文件对改变不透明,以达到解耦的目的 pimpl 用法背后的思想是把客户与所有关于类的私 ...
- 深入理解JS中的对象(一)
目录 一切皆是对象吗? 对象 原型与原型链 构造函数 参考 1.一切皆是对象吗? 首先,"在 JavaScript 中,一切皆是对象"这种表述是不完全正确的. JavaScript ...
- 技术人的福音!教你如何使用Typora+PicGo实现图片自动上传功能
前言 写技术文章的小伙伴,对于 Typora 肯定不陌生,用来编写 Markdown 特别的方便. 但是,有个问题,就是当我们插入一个图片,并且使之可以在公网访问时,操作流程特别的麻烦. 首先,你需要 ...
- Python脚本:linux上将筛选的文件夹复制到另一个目录,保存目录结构以及文件和文件夹操作方法
import os,shutil def newDir(dir_path): if not os.path.exists(dir_path): os.makedirs(dir_path) def co ...
- 网络通信-在浏览器输入url,基于TCP/IP协议,浏览器渲染的解释
知识点1: 网络模型 TCP/IP四层 和ISO七层模型 (统一省略后面层字.比如传输代表传输层) 知识点2: 在应用层中TCP建立连接,经历的三次握手协议 首先:,TCP协议是什么? 为什么要三次握 ...
- Python中range, np.arange, np.linspace的区别
目录 range np.arange np.linspace range 特点 range()是python内置函数,指定开始值,终值和步长生成等差数列的一维数组 不包含终值 步长只能是整数,生成整数 ...
- mp4封装格式各box类型讲解及IBP帧计算
mp4封装格式各box类型讲解及IBP帧计算 目录 mp4封装格式各box类型讲解及IBP帧计算 box ftyp box moov box mvhd box (Movie Header Box) t ...