分享3:

需求:对已经开发的应用程序进行安装封装操作,即创建安装、卸载部署程序;

分析:程序的开发是为了在不同的人在不同的机器上使用,为了使不同机器使用该软件就需要见程序安装包,并且保证安装包中必须包含此软件运行所需的运行环境;

具体操作:

1.在VS2010中新建项目,选择:其他项目类型->安装与部署->安装向导,然后确定;

2.界面默认出现文件系统,分左右两侧;在右侧中点击应用程序文件夹后,右键选择添加文件,将需要打包的执行文件以及相关的组件类库等添加进行;

3.右击左边的“应用程序文件夹”打开属性对话框,将属性中的“defaultlocation”的路径中的“[manufacture]”去掉(不然安装程序默认目录就是c:\programm file\你的用户名\安装解决方案名称)

4.对执行程序增加快捷方式,选中执行程序,右键选择生成快捷方式,可以进行重命名,并将其剪切到左侧的“用户的“程序”菜单”或用户桌面(这样在安装完成后,快捷方式就会在菜单或桌面出现)

5.(重要环节)选择项目名称右键,选择属性;在属性页中,选择“系统必备”,将勾选“创建用于安装系统必备组件的安装程序”;在复选框中选择你必备组件;勾选“从与我的应用程序相同的位置下载系统必备组件”(重要一点:勾选”从与我的应用程序相同的位置下载系统必备组件(D)”,其实意思就是说你勾选后,生成安装项目时,在你安装项目的路径下,会有你在系统必备组件列表中勾选的组件.(系统自动完成,这一点还不错,不需要你自己去下载组件))

到此,基本完成制作,点击“生成->生成解决方案”,即可在Debug中找到setup.exe或者“项目名称.msi”

6.关于“创建卸载功能”,有两种方式如下:

方法一:

A.在添加应用程序时,需要添加一个msiexec.exe(可以重命名为Uninstall.exe),同执行程序一样(这个文件在c:\window\system32文件夹下);

B.(重要环节)选中msiexec.exe,需要给该执行程序设置Aguement属性值输入“/x {ProductCode}”(/x与{ProductCode}间有空格),ProductCode值在项目属性中可以找到(即为该安装程序的注册表号)

这个卸载程序有一个缺点:当制作的安装包电脑系统如果是64位的话,那么如果安装程序完成后,在32位电脑上这个卸载功能的话,就行不通(因为msiexec.exe是64位的)。为解决这个问题,唯有自己创建一个应用程序,直接调用系统中的msiexec.exe。

方法二:

新建一个控制台程序,在Main方法中添加如下代码:string sysroot = System.Environment.SystemDirectory;System.Diagnostics.Process.Start(sysroot+“\\msiexec.exe“,“/x {ProductCode(此值在安装程序项目属性中取得) } /qr”);

点击生成,在bin文件夹中得到.exe文件,将其加入到安装程序项目中的“应用程序中去”(后面操作一样了)。这样就可以直接调用电脑系统中的msiexec.exe程序了。

至此,基本完成安装程序,至于其他设置,可以在属性中设置相关的参数,也可以在视图中自定义安装界面等等。

C#创建安装、卸载部署程序的更多相关文章

  1. Android 安装 卸载 更新 程序

    安装程序的方法: .通过Intent机制,调出系统安装应用,重新安装应用的话,会保留原应用的数据. 1. String fileName =Environment.getExternalStorage ...

  2. C# Windows服务创建安装卸载

    一.创建Windows服务 使用VS创建一个新的windows服务应用程序 创建完成之后 二.相关配置 修改Service1名称为StartService(可以不改,自行选择) 添加安装程序并修改配置 ...

  3. MFC安装与部署(程序打包)

    (发现csdn传照片实在是太麻烦, 不能够直接拖拽进来;所以我直接使用云笔记生成一张图片 直接完成!) (懒癌晚期-)

  4. 安装和卸载windows程序

    安装windows service通常有两种工具 1.Framework目录下的installutil.exe工具.2.visual studio命令行工具 在这里我要说的是当我们使用的系统是64位的 ...

  5. android 静默安装 卸载 资料汇总

    1. android + eclipse + 后台静默安装(一看就会) 2. 适用于android1.5以下版本apk静默安装 3. error: INSTALL_FAILED_SHARED_USER ...

  6. ClickOnce部署疑难杂症:更新时部署与应用程序标识不一致问题。要安装此应用程序,请修改此文件的清单版本或卸载之前存在的应用程序。

    使用ClickOnce部署winform应用程序.无论是安装或者自动更新都极为方便,但有时候一些疑难杂症也令人头疼 1.注意每次部署完成之后 setup.exe无需覆盖,只需要在Application ...

  7. C#Windows Service程序的创建安装与卸载

    C#Windows Service程序的创建安装与卸载 一.开发环境 操作系统:Windows7x64 sp1 专业版 开发环境:Visual studio 2013 编程语言:C# .NET版本: ...

  8. 他山之石——vs2013 安装与部署及程序打包

    C#打包需要这个:InstallShield 2013 Limited Edition for Visual Studio  .下载地址: InstallShield 2013 Limited Edi ...

  9. 【转】.NET 安装和部署(Installer) 如何卸载上一个版本

    前言 当使用.NET“安装项目”打包的安装文件,再次安装的时候会弹出如下提示,这个时候会让我们很郁闷,怎样才能自动卸载上一个安装的版本呢?方法很简单,只需简单的两个操作步骤即可解决. 操作步骤 主要由 ...

随机推荐

  1. 每日分享!~ vue JavaScript中为什么可以读取到字符串的长度!(包装对象)

    首先需要知道什么是包装对象? 对象是JavaScript语言下最主要的数据类型,三种原始的值-----数值,字符串,布尔值,在一定条件下会自动的转为对象.也就是原始类型的包装对象: 也就是通过如下方式 ...

  2. 3.Git基础-查看当前文件状态、跟踪新文件、暂存文件、忽略文件、提交更新、移除文件、移动文件

    1.检查当前文件状态 --  git status  git diff  git diff --staged   git status :我们可以使用 git status 来查看文件所处的状态.当运 ...

  3. Docker & ASP.NET Core (4):容器间的连接

    第一篇:把代码连接到容器 第二篇:定制Docker镜像 第三篇:发布镜像 Docker容器间的连接 Docker提供了两种方式可以用来做容器间的连接/通信: Legacy Linking:这种方式使用 ...

  4. Linux知识要点大全(第二章)

    第二章   linux操作系统安装与配置主要内容 1:vmware虚拟机安装与使用 2:Linux系统安装前准备 3:Linux Centos 系统的安装 4:Centos 6.8的登录和关闭 5:C ...

  5. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  6. 【带着canvas去流浪】(1)绘制柱状图

    目录 一. 任务说明 二. 重点提示 三. 示例代码 四. 思考题 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端& ...

  7. 剑指前端(前端入门笔记)——Date类型

    Date类型 ECMAScript中的Date类型是在早期Java中的java.util.Date类基础上构建的.为此,Date类型使用自UTC(国际协调时间)1970年1月1日午夜(零时)开始经过的 ...

  8. 使用Android服务,实现报警管理器和广播接收器

    介绍 几乎在所有平台上都有很多进程运行背景,它们被称为服务.可能在Android平台中有一些服务可以执行长时间运行的操作,这些操作在处理时不需要用户交互. 在本文中,借助预定义的Android警报服务 ...

  9. Testlink1.9.17使用方法( 第四章 测试需求管理 )

    第四章 测试需求管理 QQ交流群:585499566 需求规格说明书是我们开展测试的依据.首先,我们可以对项目(产品)的需求规格说明书进行分解和整理,将其拆分为多个需求,一个项目可以包含多个需求,一个 ...

  10. 我们距离AI编程还有多远?

    近几年来,人工智能的信息以不同形式霸占着我们的眼球,我们知道AlphaGo.微软小冰.Sophia,了解过自动驾驶.无人机.智能家居等,深知人工智能是在记忆力.学习力.运算力方面都远超人类的存在,但人 ...