• 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的连接数据库的字符串 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目录下可看见生成的安装包。

  • 相关阅读:
    matlab矩阵中如何去掉重复的行;如何找到相同的行,并找到其位置
    Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
    机器学习基石笔记1——在何时可以使用机器学习(1)
    Coursera 机器学习 第9章(上) Anomaly Detection 学习笔记
    matlab安装过程的被要求的配置程序
    jdk环境变量配置
    Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记
    Coursera 机器学习 第8章(上) Unsupervised Learning 学习笔记
    Coursera 机器学习 第7章 Support Vector Machines 学习笔记
    linux服务器---squid限制
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/968701.html
Copyright © 2020-2023  润新知