当前位置:首页>>开发编程>>VS.NET>>新闻内容
VS.NET2005 web程序自定义安装包的制作
作者: 发布时间:2007-11-24 16:12:27 文章来源:

  利用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的连接数据库的字符串 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

        创建虚拟目录 创建虚拟目录

        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  从这里开始启动安装 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 删除 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目录下可看见生成的安装包。


最新更新
·C#中使用Split分隔字符串的技
·VS2008开发中Windows Mobile
·PC机和移动设备上绝对路径的
·C#程序加壳的方法(使用Sixx
·当前上下文中不存在名称Conf
·请插入磁盘:Visual Studio 2
·用VS.NET读取Flash格式文件信
·在ASP.NET中使用AJAX的简单方
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻
相关信息
·VS2008开发中Windows Mobile 5.0 emulator连网的配置
·C#程序加壳的方法(使用Sixxpack)
·当前上下文中不存在名称ConfigurationManager的解决方法
·请插入磁盘:Visual Studio 2005 DVD
·用VS.NET读取Flash格式文件信息
·VS.NET 2005中常用的一些代码
·安装VS.NET 2005 SP1补丁全攻略
·VS.NET 2005 常用的快捷键大全
·VS.NET2005智能感知失效的解决办法
·VS.NET 2005 + VSS6.0简单应用示例
 画心
 愚爱
 偏爱
 火苗
 白狐
 画沙
 犯错
 歌曲
 趁我
 稻香
 小酒窝
 狮子座
 小情歌
 全是爱
 棉花糖
 我知道
 钻石糖
 Nobody
 我爱他
 套马杆
 星空物语
 最后一次
 少女时代
 穿越人海
 断桥残雪
 美了美了
 明天过后
 我很快乐
 到了明天
 心痛2009
 爱丫爱丫
 寂寞好了
 敢不敢爱
 郎的诱惑
 爱情买卖
 super girl
 我叫小沈阳
 i miss you
 姑娘我爱你
 我们都一样
 其实很寂寞
 习惯了寂寞
 我要的飞翔
 我的好兄弟
 爱的华尔兹
 李雷和韩梅梅
 贝多芬的悲伤
 爱我就跟我走
 丢了幸福的猪
 我只是个传说
 要嫁就嫁灰太狼
 即使知道要见面
 如果我变成回忆
 看得最远的地方
 斯琴高丽的伤心
 别在我离开之前离开
 不是因为寂寞才想你
 爱上你等于爱上了错
 在心里从此永远有个你
 一个人的寂寞两个人的错