随笔 - 53  文章 - 0  评论 - 908 

最近公司要求OA要以安装的形式,方便实施人员安装到客户机器上。

之前是在好几年前用VS2003的打包过Web项目,不过早已忘却。

所以第一个想法就是使用搜索引擎查找,网上也有许多介绍,不过有些讲的比较粗,看不太明白。还是动手实践一下,或许会清爽明朗。

 

在测试Web项目中新建一个Web安装项目,如下图:

image 


在新建的安装项目,右击项目如下图:

image

 

选择项目输出,选择要输出的项目,如下图:

image

我选一个Web网站,则只有内容输出选项,选中内容文件选择确定。

如果选Web项目,则如下图:

image

 

右击项目点击属性,则出现如下图:

image

再点击系统必备:

image

这些选择打包程序需要包含的组件,主要是我们需要.Net Framework组件,我们需要打包进来。

这里将.Net Framework 2.0(X86)打钩,并且在下面指定系统必备组件的安装位置选择第二项,这样就打钩的组件就会跟进安装包了。

第一项则是组件从微软网站上下载,第三项则是指定自定义位置。

 

点击确定,接下来,我们右击项目,如下图:

image

点击启动条件,如下图:

image

我们可以看到启动条件,我们来看看IIS条件,右击IIS条件,查看属性窗口,如下图:

image

 

这里可以看到设置条件,IISVERSION >= "#5"表示IIS版本需要5.0以上,如果需要6.0以上则是IISVERSION >= "#6"。

 

下面我们来设置安装界面。右击项目如下图:

image

选择点击用户界面,如下图:

image

这里我已经添加了三个步骤,分别是许可协议、客户信息、文本框(A)这三个。

image

通过右击启动,点击添加对话框,如下图:

image

来选择我们需要的步骤。

 

右击许可协议步骤,查看属性如下图:

image

我们知道在安装很多软件的时候都会有一步是许可协议,然后让我们点击同意,然后再下一步,就是这里啦。

我们这里添加了一个license.rtf文件到安装项目,这里就可以选择这个文件了。

image

 

由于在安装过程也需要设置数据库,所以我们还需要让安装用户在安装过程中输入数据库服务器信息,这里就是文本框(A)这个步骤啦。右击步骤查看属性窗口如下图:

image

这里有四个文本框可以使用,我们只需要三个数据库服务器、帐号、密码,所以第四个Visible设置为false。

 

由于需要配置数据库,则我们需要再建一个项目,新建一个类库项目,然后添加一个安装类,如下图:

image

生成一个安装类如下图,是一个继承Installer类的类。

image

 

然后我们需要在安装类中编写代码啦。

我们重写Install方法:

public override void Install(IDictionary stateSaver)

这里就是我们需要写配置数据库信息。

 

然后我们在安装项目中添加这个项目,如下图:

image

然后右击安装项目,如下图:

image

选择自定义操作,则出现自定义操作界面如下图:

image

然后我们在安装的操作中添加刚才的新建的项目,右击安装,添加自定义操作,如下图:

image

选中并点击确定。接下来我们需要在安装过程传递输入的数据传递这个项目中,右击安装下面的刚添加的主输出,如下图:

image

属性框中的CustomActionData就是指定要传递到安装程序的自定义数据。

 

然后我们再回到新建的那个安装类,在Install方法就可以接收安装过程中输出的数据库信息,如下:

public override void Install(IDictionary stateSaver)
{
    base.Install(stateSaver);
    string databaseServer = Context.Parameters["server"].ToString();
    string userName = Context.Parameters["user"].ToString();
    string userPass = Context.Parameters["pwd"].ToString();
    string targetdir = Context.Parameters["targetdir"].ToString();

    //这里操作添加数据库,只要执行创建数据库的脚本就可以了。


    //这个是测试在安装目录下添加接收到的用户填写的数据库信息
    File.WriteAllText(Path.Combine(targetdir, "log.txt"), databaseServer + "/n/r" + userName + "/n/r" + userPass);
}

这里Context.Parameters["server"]的Server和上面设置CustomActionData是对应的。

 

这样就完成了安装包的制作了,编译生成一下,我们测试一下安装包是否真的有效。

下面接一下制作完安装过程:

image

image

image

image

image

image

image

image

安装过程就这么多了。

下面我们来看看是否已经安装成功,如下图:

image

说明Web网站已经成功被安装到虚拟目录下了。

 

下载示例

 


作者:steven hu
出处:http://www.cnblogs.com/huxj
MSN: cn_huxj@hotmail.com
交流QQ群:60831381
版权声明:欢迎任何网络媒体和网站转载本人博客的内容,只需注明作者和主博客文章地址的链接。另有约定者除外。
此声明随时可能修改,不另行通知。
评论快速通道:
posted on 2010-09-10 21:49 steven hu 阅读(5662) 评论(79) 编辑 收藏

 回复 引用 查看   
#1楼 2010-09-10 22:01 | sun8134      
学习下
 回复 引用 查看   
#2楼 2010-09-10 22:04 | pwm_1987      
好文要顶,推荐一下!
 回复 引用 查看   
#3楼 2010-09-10 23:09 | huawu      
以后可能会用上,收下啦!
 回复 引用 查看   
#4楼 2010-09-10 23:14 | 铁血佣兵      
好文要顶,推荐一下!
 回复 引用 查看   
#5楼 2010-09-10 23:34 | 泡泡饭      
不错, 楼主辛苦了
 回复 引用 查看   
#6楼 2010-09-10 23:35 | 卡索      
呵呵!非常好的文章必须顶起来,都是干货
 回复 引用 查看   
#7楼 2010-09-10 23:48 | Simcoder      
好文要顶,推荐一下!
 回复 引用 查看   
#8楼 2010-09-11 00:27 | luckuny      
不错!
 回复 引用 查看   
#9楼 2010-09-11 00:57 | Jeffrey.Liang      
朋友,我照着你的说明,去做的安装包。运行安装包的时候,出现"Error 1001. 未将对象引用到实例"的错误。CustomActionData的值是“/server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"吗?不知道是不是这个地方写错了。
另外,你提到要在方法public override void Install(IDictionary stateSaver)中运行数据库脚本,这里具体该怎么写呢?脚本文件又放在哪呢?
谢谢!

 回复 引用 查看   
#10楼 2010-09-11 01:08 | zyshang      
路过,凑个热闹^_^
 回复 引用 查看   
#11楼 2010-09-11 08:05 | JasenKin      
路过 写得不错
 回复 引用 查看   
#12楼 2010-09-11 08:28 | John Liu      
说的很详细,以前用过,现在都是打包成压缩文件让售后给架了。
 回复 引用 查看   
#13楼 2010-09-11 08:29 | 澜紫癜青      
好文要顶,推荐一下!
 回复 引用 查看   
#14楼 2010-09-11 08:41 | 翟靖云      
好文要顶,推荐一下!
 回复 引用 查看   
#15楼 2010-09-11 08:45 | 海浪~~      
好文要顶,推荐一下!
 回复 引用 查看   
#16楼 2010-09-11 08:46 | 游龙踏雪      
好文要顶,推荐一下!
 回复 引用 查看   
#17楼 2010-09-11 10:36 | 雨云      
这几天正在为这个发愁呢,楼主出现得真及时啊
 回复 引用 查看   
#18楼 2010-09-11 10:40 | 风雨者2      
好文要顶,推荐一下!
 回复 引用 查看   
#19楼 2010-09-11 10:55 | JHCHEN      
好文要顶,推荐一下!
 回复 引用 查看   
#20楼 2010-09-11 11:03 | gb2312      
好文要顶,推荐一下!
 回复 引用 查看   
#21楼 2010-09-11 11:11 | 喵 喵      
好文要顶,推荐1下!
 回复 引用 查看   
#22楼 2010-09-11 11:14 | clound      
so good
 回复 引用 查看   
#23楼 2010-09-11 12:42 | Jeremy Ding      
好文要顶,推荐一下!
 回复 引用 查看   
#24楼 2010-09-11 12:48 | michaelxqy      
好文要顶,推荐一下!
的确是做得好,不得不推荐。

 回复 引用 查看   
#26楼[楼主] 2010-09-11 13:36 | steven hu      
谢谢大家的支持。

@Jeffrey.Liang
server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"
这里的EDITA1是要和在用户界面中的我截图中文本框(A)步骤中的edit1property属性值对应的,EDITA2、EDITA3也是一样。

至于数据库如何执行就和平时我们使用SqlConnection连接数据库操作一样的,sql脚本可以以嵌入资源的形式加到DbInstall项目中。
这个我会再写一篇文章详细说明。

 回复 引用 查看   
#27楼 2010-09-11 13:56 | 小小乐      
好文要顶,推荐一下!
 回复 引用 查看   
#28楼 2010-09-11 16:18 | Aragn      
好文要顶,推荐一下!
 回复 引用 查看   
#29楼 2010-09-11 17:18 | ChinaSpirit      
路过,凑个热闹^_^
 回复 引用 查看   
#30楼 2010-09-11 17:18 | ChinaSpirit      
好文要顶,推荐一下!
 回复 引用 查看   
#31楼 2010-09-11 17:43 | ItisFriday      
好文要顶,推荐一下!
 回复 引用 查看   
#32楼 2010-09-11 18:09 | 常言不哭      
好文要顶,推荐一下!
 回复 引用 查看   
#33楼 2010-09-11 19:57 | Jeffrey.Liang      
引用steven hu:
谢谢大家的支持。

@Jeffrey.Liang
server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"
这里的EDITA1是要和在用户界面中的我截图中文本框(A)步骤中的edit1property属性值对应的,EDITA2、EDITA3也是一样。

至于数据库如何执行就和平时我们使用SqlConnection连接数据库操作一样的,sql脚本可以以嵌入资源的形式加到DbInstall项目中。
这个我会再写一篇文章详细说明。


server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"这里的写法有没问题啊?我看前面都是name=[PropertyName]之间都是用/分隔,怎么最后是targetdir="[TARGETDIR]\"这样的形式。朋友,你能把安装项目做成一个DEMO共享出来吗(最后包括一个简单的创建数据库的项目)?谢谢你了!

 回复 引用 查看   
#34楼[楼主] 2010-09-11 21:05 | steven hu      
@Jeffrey.Liang
好的,将在下篇文章写好的时候,同时提供demo下载。
谢谢您的支持!

 回复 引用 查看   
#35楼 2010-09-11 21:08 | 秋色      
好文要顶,推荐一下!
 回复 引用 查看   
#36楼 2010-09-11 21:39 | 今晚打小鸡      
好文要顶,推荐一下!
 回复 引用 查看   
#37楼 2010-09-11 21:44 | 阿超-      
路过,凑个热闹^_^
 回复 引用 查看   
#38楼 2010-09-11 21:47 | 今晚打小鸡      
路过,凑个热闹^_^
 回复 引用 查看   
#39楼 2010-09-11 22:07 | 蓝色格调      
好文要顶,推荐一下!
 回复 引用 查看   
#40楼 2010-09-12 12:59 | 真名士      
好文要顶,推荐一下!
 回复 引用 查看   
#41楼 2010-09-12 18:46 | yzy85      
好,学习下
 回复 引用 查看   
#42楼 2010-09-13 09:42 | 项少龙      
楼主,麻烦问下,为什么我的安装界面总是直接提示:“Installation Incomplete”,然后只能点击关闭?
即便是最简单的Project,新建一个Web项目,直接新建一个Web安装项目,添加项目输出,也会这样。

 回复 引用 查看   
#43楼 2010-09-13 09:47 | 简易人生      
学习结合
 回复 引用 查看   
#44楼[楼主] 2010-09-13 10:01 | steven hu      
@项少龙
其实我这里也有问题,在我自己的vista系统下无法执行安装包的,在win2003下才可以,具体原因我也不知道。

你的问题参看一下这里:
http://social.msdn.microsoft.com/Forums/zh-HK/winformssetup/thread/6940016e-0a08-4368-8231-689e475f2d59

 回复 引用 查看   
#45楼 2010-09-13 10:13 | bullion      
学习了
 回复 引用 查看   
#46楼 2010-09-13 10:26 | 笨笨.Net      
好文要顶,推荐一下!
 回复 引用 查看   
#47楼 2010-09-13 13:20 | 郑州--飞猫      
写的很详细,学习了
 回复 引用 查看   
#48楼 2010-09-13 13:30 | lerit      
好文要顶,推荐一下!
 回复 引用 查看   
#49楼 2010-09-13 21:52 | 木由水      
好文要顶,推荐一下!
 回复 引用 查看   
#50楼 2010-09-14 08:44 | sunlovesea      
好文要顶,推荐一下!
 回复 引用 查看   
#51楼 2010-09-14 11:45 | 码魔谷      
引用steven hu:
@项少龙
其实我这里也有问题,在我自己的vista系统下无法执行安装包的,在win2003下才可以,具体原因我也不知道。

你的问题参看一下这里:
http://social.msdn.microsoft.com/Forums/zh-HK/winformssetup/thread/6940016e-0a08-4368-8231-689e475f2d59

今天遇到个发布的setup.exe不能在win7下安装(winxp是可以的),setup.msi则可以。

 回复 引用 查看   
#52楼 2010-09-14 14:16 | ymmt      
你好,这样做安装完成后,aspx.cs文件还存在,有办法去除吗?
 回复 引用 查看   
#53楼[楼主] 2010-09-14 14:22 | steven hu      
@ymmt
那你先发布网站,然后再加到安装包里。

 回复 引用 查看   
#54楼 2010-09-15 16:55 | 一过      
好,学习了
呵呵

 回复 引用 查看   
#55楼 2010-09-16 11:31 | str.chan      
好东西要不停的马克到死~~~
 回复 引用 查看   
#56楼 2010-09-17 08:47 | zhangfeng      
非常不错 学习了~~~
 回复 引用 查看   
#57楼 2010-09-17 23:37 | 骆驼大师      
如果Web安装包能在服务器上同时安装多个就好了,呵呵
 回复 引用 查看   
#58楼 2010-09-19 08:32 | wade black      
用vs自带的打包工具做web包还是有优势的
 回复 引用 查看   
#59楼 2010-09-19 11:15 | HeavenSUN      
好文要顶,推荐一下!
 回复 引用 查看   
#60楼[楼主] 2010-09-19 15:25 | steven hu      
@骆驼大师
安装多个web项目是吧? 那.net自带安装工具项目是无法满足的。

 回复 引用 查看   
#61楼[楼主] 2010-09-19 15:25 | steven hu      
@wade black
就是方便,封装了挺多的东西。

 回复 引用 查看   
#62楼 2010-10-08 17:18 | peace      
你好! 点击启动条件的地方 有个搜索IIS 那个地方属性有什么设置要求吗?我点添加IIS信息启动条件显示的却是注册表相关的属性,安装的时侯提示IIS版本要求,然后提示安装未完成,只有关闭按钮,是我还有其它什么设置没处理好?
 回复 引用 查看   
#63楼[楼主] 2010-10-09 09:01 | steven hu      
@peace
那里应该默认设置就可以了。

 回复 引用 查看   
#64楼 2010-10-09 10:14 | peace      
@steven hu
不添加IIS启动条件是可以的,加IIS启动条件就不行了,我测试的是WEB网站安装部署,不是WEB项目的

 回复 引用 查看   
#65楼[楼主] 2010-10-09 16:13 | steven hu      
@peace
我的例子也是web网站。
我在win2003上测试是通过的。

 回复 引用 查看   
#66楼 2010-11-08 14:51 | Eason Wu      
好文要顶,推荐一下!
 回复 引用 查看   
#67楼 2010-12-31 11:02 | Dreams_hsf      
DSF
 回复 引用 查看   
#68楼 2011-04-16 10:37 | csmacy      
以这种方式部署好后的网站,在目录里边的.cs后台源文件能看到,能把.cs文件加密吗?
 回复 引用 查看   
#69楼[楼主] 2011-04-16 17:24 | steven hu      
@csmacy
cs看不到啦,cs文件编译啦

 回复 引用 查看   
#70楼 2011-04-16 17:26 | csmacy      
木头
 回复 引用 查看   
#71楼 2011-04-16 17:26 | csmacy      
可以加Q吗? 136125974
 回复 引用 查看   
#72楼 2011-04-16 17:26 | csmacy      
木有
 回复 引用 查看   
#73楼 2011-04-16 17:27 | csmacy      
请问,是要选择发布后的网站吗?
 回复 引用 查看   
#74楼[楼主] 2011-04-16 17:58 | steven hu      
@csmacy
对,可以选择发布后的站点再做打包安装

 回复 引用 查看   
#75楼 2011-04-16 18:50 | csmacy      
谢谢!
 回复 引用 查看   
#76楼 2011-09-28 14:46 | 花生酱      
先谢谢楼主的分享 很详细 但是我一步步照着来的 安装到最好出现"Error 1001. 未将对象引用设置到对象的实例"的错误。请问这个是什么问题呢?怎么解决?
 回复 引用 查看   
#77楼[楼主] 2011-09-28 19:59 | steven hu      
@花生酱
CustomActionData 的值是否对应到了?你是怎么设置的,以及对应前面步骤的文本框A 中的editproperty

 回复 引用 查看   
#78楼 2011-09-28 20:07 | 花生酱      
CustomActionData:/server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"
文本框A 中的editproperty?
文本框A 我只设置了服务器、帐号、密码那
还需要设置什么?

 回复 引用 查看   
#79楼 2011-11-23 16:20 | 李彩      
引用花生酱:
CustomActionData:/server=[EDITA1]/user=[EDITA2]/pwd=[EDITA3] /targetdir="[TARGETDIR]\"
文本框A 中的editproperty?
文本框A 我只设置了服务器、帐号、密码那
还需要设置什么?

我也出现了这个错误。。。请楼主帮解答,系统是WIN7