2008 Windows Form项目的发布对有经验的程序员来说,可能不值一提,但对很多新手来说却不知道如何操作,因为在很多关于Visual Studio的书籍中也没有相关介绍,权威如《C# 2005/8 高级编程》对该内容也末涉及。好在网络上不乏热心网友对相关操作经验进行分享,只是在表述上并不详尽,笔者觉得有必要对该操作方法详细说明一番,希望能对 有些新手朋友起到一些帮助。有时学习的乐趣不在于我们掌握了何种技术、何种技巧,善于总结、学会分享也是一种不错的体验,在我们遇到问题茫然无助时,都是 多么希望能有过来人给我们指引,希望我们也能成为别人学习历程中的一个指路人。

下面就让我来说一说,如何将我们已经测试好的项目,打包发布成一个商品化软件,可双击安装的应用程序。

一、新建一个安装项目

操作步骤:文件->新建->项目,在“新建项目”对话框左边“项目类型”中选择“其它项目类型”下面的“安装和部署”,在对话框右边的“模板”窗口中选择“安装项目”。

图示如下:

给该安装项目取一个名称,如:mySetup ,并选择一下项目存储位置,如:E:\,然后单击“确定”,确定后会进入安装项目工作界面。如下图所示:

二、 在“应用程序文件夹”下添加两个文件夹,一个叫image用来存储程序的ICO图标,另一个叫program用来存储自己开发项目的Debug下面编译好 的所有文件。选中“program”,点右键添加文件,通过浏览对话框找到自己开发程序的Bin\Debug目录下的文件,将它们都添加进来。

添加后的界面如下:

三、向“用户的‘程序’”菜单中添加内容,可先添加一个文件夹,比如取名“教材管理系统”,再将program中的你的程序的可执行文件***.exe选中点右键,选择“创建***.exe”快捷方式,如下图:

给创建好的快捷方式重新命名,如“教材管理系统Ver1.0 ”,然后将其剪切到“用户的‘程序’菜单”,重复上述操作,在“用户桌面”下添加同样的快捷方式。这样在安装之后,在开始菜单“程序”与用户的桌面上就会有相应程序的菜单项及图标了。

四、给“用户的‘程序’菜单”中添加卸载该软件命令项,首先,要在program文件夹下添加Windows自带的卸载程序文件“msiexec.exe”,其路径为“C:\WINDOWS\system32”,然后将其重新命名,改成“uninstall.exe”,如下图所示:

给其创建一个快捷方式,给快捷方式重新命名,如“卸载教材管理系统”,再将其剪切到用户的“程序”菜单下面的“教材管理系统”文件夹中,如下图所示:

接着要设定该卸载快捷方式的Arguments属性,如下图所示:

命令行参数要填上要卸载程序的产品代码,代码在项目mySetup属性下的ProductCode对应的值,将其复制一下,如下图:

然后copy到卸载快捷方式的Arguments参数值上,并在前面加上“/x ”,如下图所示:

五、给应用程序添加图标 将自己喜欢的图标小文件添加到Image文件夹下,然后选中用户的“程序”菜单下面的快捷方式,在属性窗口中的 Icon中为其快捷方式添加图标。

六、添加相关的系统必备项,确保在安装时不缺少相关的文件  选中mySetup项目,点右键属性,在出现的属性页对话框中有“系统必备”按钮,如下图所示:

在出现的对话框中选择相关的必备项,如下图所示:

七、生成项目

生成成功后,在项目的Bin\Debug目录下就会找到生成好的两个安装文件,如下图所示:

双击setup就可以安装了,安装好后,在开始菜单中就会找到相应的菜单命令,如下图所示:

同样,在用户的桌面上也会有一个可执行的快捷方式图标。

到此,一个完整的vs2008程序的发布打包过程就讲解完了。

VS2008 Windows Form项目安装包生成详解的更多相关文章

  1. VISUAL STUDIO 2008 WINDOWS FORM项目发布生成安装包详解(转)

    转自:http://www.cnblogs.com/killerofyang/archive/2012/05/31/2529193.html Visual Studio 2008 Windows Fo ...

  2. electron热更新与windows下的安装包

    帮朋友公司做了点东西,他说有很多bug,我一看,基本问题都是浏览器兼容引起的,而electron内带Chromium内核,正好一直想尝试下electron,所以研究了一波.这里只是简单的使用elect ...

  3. windows上pip安装及使用详解

    windows上pip安装及使用详解 2018-11-21 19:49:58 十二笔 阅读数 8229更多 分类专栏: Python学习   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA ...

  4. DELL R720服务器安装Windows Server 2008 R2 操作系统图文详解

    DELL R720服务器安装Windows Server 2008 R2 操作系统图文详解 说明:此文章中部分图片为网络搜集,所以不一定为DELL R720服务器安装界面,但可保证界面内容接近DELL ...

  5. 项目log4j日志管理详解

    项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对 ...

  6. Windows系统Git安装教程(详解Git安装过程)

    Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: ...

  7. p2p网贷项目开发全过程技术详解,应用框架是ci2.2

    p2p网贷项目开发全过程技术详解,应用框架是ci2.2 很标准的mvc开发代码,代码也很简单,方便二次开发 这篇文章会不断更新

  8. Android项目刮刮奖详解(二)

    Android项目刮刮奖详解(一) 前言 上期我们简单地实现了一个画板的功能,用户可以在上面乱写乱画,其实,刮刮奖也是如此,用户刮奖的时候也是乱写乱画的. 刮刮奖原理 一共有两层画布,底层画布存放中奖 ...

  9. Android项目刮刮奖详解(三)

    Android项目刮刮奖详解(二) 前言 上一期我们已经实现了一个简易的刮刮卡功能,这一期我们来将其完善一下 目标 将刮刮奖的宽高改为合适高度 将刮刮奖位置居中 将信息层的图片换成文字(重点) 实现 ...

随机推荐

  1. jquery操作select(增加,删除,清空)

    jQuery获取Select选择的Text和Value: $("#select_id").change(function(){//code...}); //为Select添加事件, ...

  2. Oracle数据库习题

    以下习题都已Oracle数据库中默认表为主体 1.列出至少有一个员工的所有部门. SELECT DISTINCT D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO=D. ...

  3. 无锁队列以及ABA问题

    队列是我们非常常用的数据结构,用来提供数据的写入和读取功能,而且通常在不同线程之间作为数据通信的桥梁.不过在将无锁队列的算法之前,需要先了解一下CAS(compare and swap)的原理.由于多 ...

  4. Egit Patch

    Git为我们提供了Patch功能,Patch中包含了源码更改的描述,能够应用于其他Eclipse工作空间或者Git仓库.也就是说,可以将当前提交导出至其他分支或者项目中. 举个例子,项目A.B中使用了 ...

  5. 2015GitWebRTC编译实录14

    libvpx 尝试用脚本编译了下,发现有问题,就偃旗息鼓,改用他自己的configure了,在网上找了下,Git上有个现成的,直接用,更好些. https://github.com/brion/VPX ...

  6. 【NOIP2005】过河

    感觉这题好玄--最后看了chty的代码才过,我现在这样必须看题解才能A题怎么办嘛qaq 原题: 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上 ...

  7. 2016HUAS_ACM暑假集训3B - Frogger

    好几天没更新博客了,因为这周在看关于图论的算法,有好几个(还是英文名字-_-||),人晕晕的...... 说一下这个Frogger吧.这个题目的话......难的不是做法,而是题意... 大致题意:有 ...

  8. Android项目——读取手机联系人信息

    加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...

  9. [转]MySQL去除查询结果重复值

    在使用MySQL时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所 ...

  10. JS获取当前日期时间及JS日期格式化

    Js获取当前日期时间: var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份( ...