无序代码

.Net技术讨论

原创 VS2005 ASP.NET2.0安装项目的制作(包括数据库创建、站点创建、IIS属性修改、Web.Config文件修改)

新一篇: 正则表达式收集

这几天忙于ASP.NET2.0安装打包,在网上找遍所有信息却不能完全满足自己的需要。现总经经验出下:

1、站点: 如果新建默认的Web安装项目,那它将创建的默认网站下的一个虚拟应用程序目录而不是一个新的站点。故我们只有创建新的安装项目,而不是Web安装项目。然后通过安装类进行自定义操作,创建新站如下图:

2、创建新的安项目之后,在(文件系统编辑器)里的应用程序文件夹里,添加ASP.net2.0的项目输出(还有第二种方法是用ASP.NET2.0发布网站到一个文件夹下面,再把这个文件夹下面所有文件复制粘贴过来,这样生成的安装文件,在安装之后就没有源代码文件了,我自己就是这样做的)如下图:

图1下图的MyPojectSetup项目下已有了Web项目的输出,以及一个SQL脚本(SQL脚本是通SQL2005生成的,将在安装类库里要使用的)

图2文件系统左边界面,添加了Web项目输出

2.2添加完项目输出之后,需要设置安装界面。我们的要求是第一、建一个新站点,所以需要所安装的IIS服务器地址,以及新站点的端口。第二、需要数据库的地址,新建的数据库名称,以及访问数据库的用户名和密码两项(需要有创库权限的)。

如图1在文件系统编辑器右边,选择用户界面,然后看到如下:

在启动选择单击右击菜单,添加对话框A,并在对话框A上单击右键=》上移到安装文件夹的上面:

再次设置右边属性,文本框A是站点信息输入如下信息,其中Edit1Property是一个需要传入安装类的参数。

按照以上方式再添加文本框B并移到文本框A的下面,如下图所示

注意:如上所示安装项目基本的事情已经做完了,但还有最后一个步骤没有做,那就是自定义操作,也就安装的重中之重的事情,安装类库的创建,如3点所示。创建安装类库之后就需要把它的输出来添加到安装项目里如同Web项目,然后设置自定义活动为这个项目就可以,详情在下面介绍。

3、需要创建一个安装类库,里面把Class1.cs删除,再添加一个新的安装文件。安装项目所有的自定义都是在这里用编码完成的(包括数据库生成,虚拟站点创建,IIS属性修改,Web.Config文件修改)。也就是说,安装项目是个外壳,通过创建一些界面接收用户参数,然后利用这个安装类库,提供的功能,进行自己的操作。

 

4、安装程序类新建之后,双击进入代码状态,用override重载Install函数如下所示:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;

namespace MyProjectInstall
{
    [RunInstaller(
true)]
    
public partial class InstallerMySample : Installer
    
{
        
public InstallerMySample()
        
{
            InitializeComponent();
        }


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

        }

    }

}

 

安装数据库的代码如下,其中用了两种方法,一种是用SQL命令方式创建数据库,另一种是调用osql命令执行脚本,创建数据表结构等,最后用命令追加一条记录.

 

     数据库操作

 修改Web.Config配置的代码如下:

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

创建IIS站点的代码如下(注我也是从网找到的,其中CreateNewWebsit这个方法中我加了IIS参数设置的代码,也就是在创建IIS时一并设置了):

注意这一句:string fileName = Environment.GetEnvironmentVariable("windir") + @"\Microsoft.NET\Framework\v2.0.50727\ASPnet_regiis.exe";原因是当你不管是手动还是自动创建一个新站点,在它的属性页ASP.NET设置里都会有1.1版和2.0版这个选项,默认是1.1,现在我要部署2.0所以在默认情况下就不能够一步到位,安装完就可以访问执行,而要去设置成2.0才行.所以要调用FrameworkV2.0下的regiis.exe得新注册一下我们指定的虚拟目录,使它是2.0. 

using System;
using System.DirectoryServices;
using System.Collections;
using System.Text.RegularExpressions;
using System.Text;
using System.Runtime;
using System.Diagnostics;
/**
 * @author 吴海燕
 * @email  wuhy80-usual@yahoo.com
 * 2004-6-25 第一版
 
*/


namespace Wuhy.ToolBox
{
    
/// <summary>
    
///  这个类是静态类。用来实现管理IIS的基本操作。
    
///  管理IIS有两种方式,一是ADSI,一是WMI。由于系统限制的原因,只好选择使用ADSI实现功能。
    
///  这是一个遗憾。只有等到只有使用IIS 6的时候,才有可能使用WMI来管理系统
    
///  不过有一个问题就是,我现在也觉得这样的一个方法在本地执行会比较的好。最好不要远程执行。
    
///  因为那样需要占用相当数量的带宽,即使要远程执行,也是推荐在同一个网段里面执行
    
/// </summary>

    public class IISAdminLib
    
{
        
UserName,Password,HostName的定义

        
根据路径构造Entry的方法