`
hugh-lin
  • 浏览: 70406 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]VS2005 web程序自定义安装包的制作

阅读更多

利用VS2005的“Web安装项目”建立安装包很难对安装过程进行详细控制,因此直接采用“安装项目”来建立web程序安装包。我们需要安装过程中自动创建虚拟目录,并且可以修改数据库连接字符串,假设我们在安装过程中需要用户修改web.config文件里连接字符串其形式如下:



<configuration>
...

<connectionStrings>
<add name="myDataBase" connectionString="Database=testDataBase;Server=10.78.25.23;Uid=sa;Pwd=123;" providerName="System.Data.SqlClient"/>
</connectionStrings>

...

</configuration>
则建立安装包的过程如下:

1)发布网站:右键点击web项目,在弹出菜单里点击“发布网站”将它发布到本地机器。

2)新建安装项目:从菜单处依次点 文件->新建->文件->项目->其他项目类型->安装和部署->安装项目,输入名称与位置,并确定。在项目属性里设置相应的说明内容。

3)在启动项里添加文本框:右键点击项目,在弹出菜单里选择 视图->用户界面,出现用户界面的树形结构。右键点击“启动”节点,添加“文本框(A)”与“文本框(B)”,并将它们移动到“安装文件夹”之上。这两个界面用来接收用户安装过程中输入的“web服务地址与虚拟目录”和“数据库连接字符串”。两个文本框的属性设置如下:

文本框(A)

BannerText:网站设置

BodyText:设置web服务地址与虚拟目录

Edit1Label:web服务器:

Edit1Property:IISSERVER //这个是自己起的名字

Edit1Value:localhost //此为默认值,可不设置

Edit1Visible:True

Edit2Label:虚拟目录:

Edit2Property:VIRTUALDIR //这个是自己起的名字

Edit2Value:testWeb //此为默认值,可不设置

Edit2Visible:True

Edit3Visible:False

Edit4Visible:False

文本框(B)

BannerText:数据库设置

BodyText:设置数据库连接字符串

Edit1Label:数据库服务器:

Edit1Property:DBSERVERNAME //这个是自己起的名字

Edit1Value:10.78.25.23 //此为默认值,可不设置

Edit1Visible:True

Edit2Label:数据库名称:

Edit2Property:DBNAME //这个是自己起的名字

Edit2Value:testDataBase //此为默认值,可不设置

Edit2Visible:True

Edit3Label:登录帐号:

Edit3Property:USERNAME //这个是自己起的名字

Edit3Value:sa //此为默认值,可不设置

Edit3Visible:True

Edit4Label:登录密码:

Edit4Property:PASSWORD //这个是自己起的名字

Edit4Value:

Edit4Visible:True

4)建立安装程序类:新建一c#类库项目“SetupClassLibrary”,然后右键 添加->新建项->安装程序类,建立一安装程序类如下:




using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.DirectoryServices;
using System.Reflection;
using System.Data;
using System.Data.SqlClient;
using System.Configuration.Install;
using System.Management;
using System.Collections;
using Microsoft.Win32;
using System.Collections.Specialized;


namespace SetupClassLibrary
...{


[RunInstaller(true)]
public partial class MyInstaller : Installer
...{
//先设置私有成员,对应安装程序里接收到的用户输入
private string dbname;

private string dbserver;

private string user;

private string pwd;

private string iis;

private string physicaldir;

private string virtualdir;

public static string VirDirSchemaName = "IIsWebVirtualDir";

private string _target;

private DirectoryEntry _iisServer;

private ManagementScope _scope;

private ConnectionOptions _connection;

public MyInstaller()
...{
InitializeComponent();
}

WriteWebConfig 修改web.config的连接数据库的字符串#region WriteWebConfig 修改web.config的连接数据库的字符串

private void WriteWebConfig()
...{
//加载配置文件
System.IO.FileInfo FileInfo = new System.IO.FileInfo(this.Context.Parameters["targetdir"] + "/web.config");
if (!FileInfo.Exists)
...{
throw new InstallException("缺少配置文件 :" + this.Context.Parameters["targetdir"] + "/web.config");
}
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load(FileInfo.FullName);

//修改连接字符串
foreach (System.Xml.XmlNode Node in xmlDocument["configuration"]["connectionStrings"])
...{
if (Node.Name == "add")
...{
if (Node.Attributes.GetNamedItem("name").Value == "myDataBase")
...{
Node.Attributes.GetNamedItem("connectionString").Value = String.Format("Database={0};Server={1};Uid={2};Pwd={3};", dbname, dbserver, user, pwd);

}

}
}

xmlDocument.Save(FileInfo.FullName);

}

#endregion

创建虚拟目录#region 创建虚拟目录

private void CreateVirtualDir()
...{
string constIISWebSiteRoot = "IIS://"+iis+"/W3SVC/1/ROOT";
DirectoryEntry root = new DirectoryEntry(constIISWebSiteRoot);

DirectoryEntry tbEntry = root.Children.Add(virtualdir, root.SchemaClassName);
tbEntry.Properties["Path"][0] = physicaldir;//设置物理地址
tbEntry.Invoke("AppCreate", true);
//tbEntry.Properties["DefaultDoc"][0] = "Default.aspx";//设置起始页
tbEntry.CommitChanges();

}

#endregion

Install 从这里开始启动安装#region Install 从这里开始启动安装

public override void Install(IDictionary stateSaver)
...{

base.Install(stateSaver);

physicaldir = this.Context.Parameters["targetdir"].ToString();

virtualdir = this.Context.Parameters["virtualdir"].ToString();

dbname = this.Context.Parameters["dbname"].ToString();

dbserver = this.Context.Parameters["dbserver"].ToString();

user = this.Context.Parameters["user"].ToString();

pwd = this.Context.Parameters["pwd"].ToString();

iis = this.Context.Parameters["iis"].ToString();

// 添加网站
CreateVirtualDir();

// 修改web.config
WriteWebConfig();

}

#endregion

Uninstall 删除#region Uninstall 删除

public override void Uninstall(IDictionary savedState)
...{
//添加自定义的卸载代码
if (savedState == null)
...{
throw new ApplicationException("未能卸载!");
}

else
...{
base.Uninstall(savedState);
}

}

#endregion

}
}


5)添加项目输出:

编译生成“SetupClassLibrary”

然后右键单击2)中建立的安装项目 添加->项目输出中选择“SetupClassLibrary”,选中“主输出”,单击“确定”。这样你可以在解决方案安装项目树中看见多了“主输出来自SetupClassLibrary(活动)”节点。

再右键此安装项目 视图->自定义操作 中选择“安装”节点,右键 “添加自定义操作”,进入“应用程序文件夹”,选中“主输出来自SetupClassLibrary(活动)”,单击“确定。

选中“安装”下的“主输出来自SetupClassLibrary(活动)”节点,在其属性窗口中设置CustomActionData 的值为 /dbname=[DBNAME] /dbserver=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWORD] /iis=[IISSERVER] /virtualdir=[VIRTUALDIR] /targetdir="[TARGETDIR]\",这是设置文本框(A)和文本框(B)中的输入与安装程序类中要访问的变量之间的对应关系,其中targetdir="[TARGETDIR]\"代表应用程序安装目录(注意:各个对应关系之间必须用空格隔开)。

6)添加文件:这一步,我们将发布网站时生成的文件夹全部克隆到安装项目中。

右键安装项目,视图->文件系统 在“应用程序文件夹”下按发布网站时生成的文件夹里的结构添加文件夹与文件。

说明:

1.这些文件都需要我们从发布网站的文件夹里添加进来,比如一般需要建立对应的“bin”文件夹,并在里面添加对应的程序集文件,而且一般我们会在“应用程序文件夹”根下添加web.config文件。

2.这里的文件将被复制到目标计算机上,此安装项目将在目标计算机上建立虚拟目录指向此文件夹。

7)编译生成,OK! 到安装项目的debug或者release目录下可看见生成的安装包。

分享到:
评论

相关推荐

    Windows安装包制作工具NextInstaller4.08.zip

    2.在脚本的招待过程中可以调用VBScript进行过程控制,使得系统更加灵活,更易于扩展(目前系统中所提供WEB安装盘制作模版就是调用VBScript进行IIS配置)。 3.制作的安装盘可以不生成反安装信息,可以应用与制作软件...

    安装程序打包工具InstallShield2018专业版v24.0.438绿色特别版(免激活)

    InstallShield 2018破解版是一款目前Windows平台上最专业、最好用的安装程序打包制作工具,通俗点说就是程序打包工具,可以用于各类安装包的制作操作,软件提供了人性化的设置选项,支持自定义安装程序的图标、...

    NextInstaller 安装盘制作

    2.在脚本的招待过程中可以调用VBScript进行过程控制,使得系统更加灵活,更易于扩展(目前系统中所提供WEB安装盘制作模版就是调用VBScript进行IIS配置)。 3.制作的安装盘可以不生成反安装信息,可以应用与制作软件...

    NTKO文档在线编辑控件独立安装包4.0.6.5(适合TA2009\2010\2011版本)

    这可以让您更加快速的集成现有的应用程序,或者创建新的应用程序,并充分利用已有经验。★ 支持所有的Office菜单 完全符合用户习惯,用户操作更加轻松,尤其是复杂的表格操作,和在Office中操作完全一致,大大节约...

    风讯dotNETCMS v2.0 RC1 安装包.zip

    风讯DOTNETCMS是一款具有...风讯网站内容管理系统在系统现有数据库字段的基础上,用户可以使用自定义字段、自定义表单功能,扩展需要使用的字段、以及数据库表、制作如留言簿、在线咨询等其他模块,具备良好的扩展性。

    风讯DOTNETCMS v2.0 RC1 安装包.rar

    风讯DOTNETCMS是一款具有...风讯网站内容管理系统在系统现有数据库字段的基础上,用户可以使用自定义字段、自定义表单功能,扩展需要使用的字段、以及数据库表、制作如留言簿、在线咨询等其他模块,具备良好的扩展性。

    asp.net知识库

    将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...

    Macromedia Fireworks 8

    Fireworks 与多种产品集成在一起,包括 Macromedia 的其它产品(如 Dreamweaver、Flash、FreeHand 和 Director)和其它您喜欢的图形应用程序及 HTML 编辑器,从而提供了一个真正集成的 Web 解决方案。利用为您所使用...

    Wise for Windows Installer—功能强大、丰富的软件安装工

    它能够为各种设备(包括桌面,服务器,Web,以及移动设备)创建安装文件。Wise for Windows Installer企业版是一个为开发共享资源应用程序的企业所提供的Windows Installer (.MSI)安装工具。除了一整套用于验证和...

    风讯DOTNETCMS 2.0 RC1 安装包

    风讯DOTNETCMS是一款具有...风讯网站内容管理系统在系统现有数据库字段的基础上,用户可以使用自定义字段、自定义表单功能,扩展需要使用的字段、以及数据库表、制作如留言簿、在线咨询等其他模块,具备良好的扩展性。

    天锐绿盾 V5.55.181206.SC.zip

    支持WEB申请和审批 3.支持操作系统的补丁安装情况扫描和自定义安装补丁 4.支持备份服务器分布式部署 优化: 1.增加APP支持打开的音、视频格式 2.解决钉钉4.5.18.132监控不到的问题 3.系统稳定及部分功能优化 -...

    完全掌握加密解密实战超级手册.z01

    32712.1.2 编辑CAB压缩包 34112.2 Wise安装包软件 34312.3 Setup Factory安装包制作工具 34312.4 Inno Setup安装制作软件 35212.4.1 Inno Setup的使用介绍 35212.4.2 Inno Setup的脚本语法介绍 35712.4.3 压缩包的...

    完全掌握加密解密实战超级手册.zip02

    32712.1.2 编辑CAB压缩包 34112.2 Wise安装包软件 34312.3 Setup Factory安装包制作工具 34312.4 Inno Setup安装制作软件 35212.4.1 Inno Setup的使用介绍 35212.4.2 Inno Setup的脚本语法介绍 35712.4.3 压缩包的...

    PHP开发实战1200例源码

    实例061 网页框架的制作 92 实例062 图片验证码 93 实例063 健康生活提醒 95 2.5 循环控制 96 实例064 员工生日列表 96 实例065 员工详细信息浏览 97 实例066 员工信息的批量删除 98 实例067 表格的动态创建 99 实例...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例061 网页框架的制作 92 实例062 图片验证码 93 实例063 健康生活提醒 95 2.5 循环控制 96 实例064 员工生日列表 96 实例065 员工详细信息浏览 97 实例066 员工信息的批量删除 98 实例067 表格的动态创建 99 实例...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例061 网页框架的制作 92 实例062 图片验证码 93 实例063 健康生活提醒 95 2.5 循环控制 96 实例064 员工生日列表 96 实例065 员工详细信息浏览 97 实例066 员工信息的批量删除 98 实例067 表格的动态创建 99 实例...

    Editplus 3[1].0

    单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意...

    editplus 代码编辑器html c++ jsp css

    单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意...

    EditPlus 2整理信箱的工具

    单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。 【6】软件技巧——键盘记录的注意...

Global site tag (gtag.js) - Google Analytics