用ASP.NET(VB版)创建WINDOWS 2000 SERVER站点 
用ASP.NET(VB)创建的WEB站点,我们的调用方式非常简单: 
Dim test As New Class1() 
test.CreateWebSit(webname,port, "D:\VB", "localhost")  
下面是Class1的代码,该代码做的工作就是建立站点,如果有此站点的名称则自动覆盖(注意:本类需要引用Actice DS Type Library) 
Public Class Class1 
用localhost 
'=========================== 
Function CreateWebSit(ByVal WWWSiteName As String, _ 
ByVal WWWTCPPort As String, _ 
ByVal WWWFilesPath As String, _ 
ByVal ComputerName As String) As Boolean 
CreateWebSit = True 
Dim TCPPort() As Object 
'建立活动桌面'(IADS)对象。首先要在 VB 中的 'prject'菜单中的'references'中引'用 Active DS 'Type 'library 组件 
Dim WWWServer As ActiveDs.IADs 
Dim WWWService 
Dim WWWVdir, WWWVdir2, WWWVdirRes As ActiveDs.IADs 
Dim i As Integer 
Dim HandleSameCase As Boolean 
'取得W3SVC服务 
WWWService = GetObject("IIS://" & ComputerName & "/W3SVC") 
i = 1 
HandleSameCase = True 
On Error GoTo ErrWouldDo 
'在IIS中查找每一个WEB站点 
For Each WWWServer In WWWService 
WWWServer = Nothing 
WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & i) 
'Debug.Print WWWServer.ServerComment 
'如果在安装时系统中已经有了要加的站点,则要先删除干净 
If UCase(WWWServer.ServerComment) = UCase(WWWSiteName) Then 
WWWService.Delete("IISWebServer", i) '再删除 
Exit For 
End If 
ReDim TCPPort(1) 
TCPPort(0) = "" 
TCPPort = WWWServer.Serverbindings 
'如果端口已经有了则也要先删除 
If TCPPort(0) = ":" & WWWTCPPort & ":" Then 
WWWService.Delete("IISWebServer", i) '删除 
Else 
i = i + 1 
End If 
Next 
HandleSameCase = False 
CreateSite: 
'MsgBox I 
WWWServer = WWWService.Create("IISWebServer", i) '创建新站点 
WWWServer.ServerComment = WWWSiteName '设置站点名 
WWWServer.Serverbindings = ":" & WWWTCPPort & ":" '设置端口号 
WWWServer.DefaultDoc = "default.asp,index.asp,default.htm,index.htm" '设置默认启动文件 
WWWServer.AccessScript = True '设置权限 
WWWServer.AccessRead = True 
WWWServer.SetInfo() 
'创建设置主目录 
WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & i) 
WWWVdir = WWWServer.Create("IISWebVirtualDir", "root") 
WWWVdir.Path = WWWFilesPath '主目录的实际磁盘路径 
WWWVdir.SetInfo() 
WWWVdir.AppCreate(True) 
WWWServer.Start() '启动新站点 
'建立虚拟目录 
'Set WWWVdirRes = WWWVdir.Create("IISWebVirtualDir", "Resource") '创建虚拟目录 
'WWWVdirRes.Path = WWWFilesPath + "\Resource" 
'WWWVdirRes.AccessRead = True 
'WWWVdirRes.AccessWrite = True 
'WWWVdirRes.SetInfo 
'下面为自定义IIS Web Server的错误信息,等发生404错误时候指定调用网站主目录下的404.htm页面显示 
WWWServer.HttpErrors = "404,0,FILE," + WWWFilesPath + "\404.htm" 
WWWServer.SetInfo() 
CreateWebSit = True 
Exit Function 
ErrWouldDo: 
'MsgBox Err.Description 
If (HandleSameCase = True) Then 
GoTo CreateSite 
Else 
MsgBox(Err.Description) 
CreateWebSit = False 
Exit Function 
End If 
End Function 
REM 建立虚拟目录程序 
'ComputerName 服务器名(可以为localhost) 
'DirName 要建立的虚拟目录名 
'LinkAddr 该虚拟目录的真实路径 
'WWWSiteName 站点名称 
Function CreateVirtualDir(ByVal ComputerName As String, _ 
ByVal DirName As String, ByVal LinkAddr As String, _ 
ByVal WWWSiteName As String) As Boolean 
Dim i As Integer 
CreateVirtualDir = True 
'取得W3SVC服务 
Dim WWWServer As ActiveDs.IADs 
Dim WWWService 
WWWService = GetObject("IIS://" & ComputerName & "/W3SVC") 
i = 1 
Dim HandleSameCase As Boolean 
HandleSameCase = True 
Dim temp As Boolean 
temp = False 
For Each WWWServer In WWWService 
WWWServer = Nothing 
WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & i) 
If UCase(WWWServer.ServerComment) = UCase(WWWSiteName) Then 
temp = True 
Exit For 
End If 
i = i + 1 
Next 
If Not temp Then 
CreateVirtualDir = False 
Exit Function 
End If 
Dim WWWVirtualDir, WWWIF As ActiveDs.IADs 
WWWServer = GetObject("IIS://" & ComputerName & "/W3SVC/" & i & "/Root") 
REM 检查是否该站点中已有该虚拟目录 
On Error GoTo ErrHandle 
WWWIF = GetObject("IIS://" & ComputerName & "/W3SVC/" & i & "/Root/" & DirName) 
REM 如果有,则返回False 
If WWWIF.Name <> "" Then 
CreateVirtualDir = False 
Exit Function 
End If 
ErrHandle: 
'Debug.Print Err.Number 
If Err.Number = -2147024893 Then 
Err.Clear() 
REM 如果是因为没有找到该虚拟目录出错的话则进行CreateVirtualDir建立虚拟目录 
GoTo ReturnCreate 
Else 
CreateVirtualDir = False 
Exit Function 
End If REM 建立虚拟目录 
ReturnCreate: 
WWWVirtualDir = WWWServer.Create("IISWebVirtualDir", DirName) 
WWWVirtualDir.Path = LinkAddr 
WWWVirtualDir.AccessRead = True 
WWWVirtualDir.AccessScript = True 
WWWVirtualDir.AppCreate(True) 
WWWVirtualDir.SetInfo() 
CreateVirtualDir = True 
End Function 
Function GetDBConnStr(ByVal DBName As String) As String 
Select Case DBName 
Case "friend" 
GetDBConnStr = CStr(GetSetting("HostTask", "DBini", "ConnStr")) 
Case "wuye" 
GetDBConnStr = Replace$(CStr(GetSetting("HostTask", "DBini", "ConnStr")), "friend", "wuye") 
Case Else 
GetDBConnStr = CStr(GetSetting("HostTask", "DBini", "ConnStr")) 
End Select 
End Function 
End Class 

解决方案 »

  1.   

    to  zwztu:
    还是通过调用vb或是js的脚本来实现。
    .net对于IIS的操作可以直接实现吗?有其他的类的支持吗?
    我希望class1中的代码使用.net的类或是方法来实现,有这方面的办法吗!
    十分感谢!
      

  2.   

    再提供一段代码:
    .Net中如何操作IIS(源代码)  using System; 
    using System.Data; 
    using System.DirectoryServices; 
    using System.Collections; 
    namespace Aspcn.Management 

    /// <summary> 
    /// IISManager 的摘要说明。 
    /// </summary> 
    public class IISManager 

    //定义需要使用的 
    private string _server,_website; 
    private VirtualDirectories _virdirs; 
    protected System.DirectoryServices.DirectoryEntry rootfolder; 
    private bool _batchflag; 
    public IISManager() 

        //默认情况下使用localhost,即访问本地机 
        _server = "localhost"; 
        _website = "1"; 
        _batchflag = false; 

    public IISManager(string strServer) 

        _server = strServer; 
        _website = "1";  
        _batchflag = false; 

    /// <summary> 
    /// 定义公共属性 
    /// </summary> //Server属性定义访问机器的名字,可以是IP与计算名 
    public string Server 

        get{ return _server;} 
        set{ _server = value;} 

    //WebSite属性定义,为一数字,为方便,使用string  
    //一般来说第一台主机为1,第二台主机为2,依次类推 
    public string WebSite 

        get{ return _website; } 
        set{ _website = value; } 
    } //虚拟目录的名字 
    public VirtualDirectories VirDirs 

        get{ return _virdirs; } 
        set{ _virdirs = value;} 

    ///<summary> 
    ///定义公共方法 
    ///</summary> //连接服务器 
    public void Connect() 

        ConnectToServer(); 

    //为方便重载 
    public void Connect(string strServer) 

        _server = strServer; 
        ConnectToServer(); 

    //为方便重载 
    public void Connect(string strServer,string strWebSite) 

        _server = strServer; 
        _website = strWebSite; 
        ConnectToServer(); 

    //判断是否存这个虚拟目录 
    public bool Exists(string strVirdir) 

        return _virdirs.Contains(strVirdir); 

    //添加一个虚拟目录 
    public void Create(VirtualDirectory newdir) 

        string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name; 
        if(!_virdirs.Contains(newdir.Name) || _batchflag ) 
        { 
            try 
            { 
                //加入到ROOT的Children集合中去 
                DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir"); 
                newVirDir.Invoke("AppCreate",true); 
                newVirDir.CommitChanges(); 
                rootfolder.CommitChanges(); 
                //然后更新数据 
                UpdateDirInfo(newVirDir,newdir); 
            } 
            catch(Exception ee) 
            { 
                throw new Exception(ee.ToString()); 
            } 
        } 
        else 
        { 
            throw new Exception("This virtual directory is already exist."); 
        } 

    //得到一个虚拟目录 
    public VirtualDirectory GetVirDir(string strVirdir) 

        VirtualDirectory tmp = null; 
        if(_virdirs.Contains(strVirdir)) 
        { 
            tmp = _virdirs.Find(strVirdir); 
            ((VirtualDirectory)_virdirs[strVirdir]).flag = 2; 
        } 
        else 
        { 
            throw new Exception("This virtual directory is not exists"); 
        } 
        return tmp; 
    } //更新一个虚拟目录 
    public void Update(VirtualDirectory dir) 

        //判断需要更改的虚拟目录是否存在 
        if(_virdirs.Contains(dir.Name)) 
        { 
            DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir"); 
            UpdateDirInfo(ode,dir); 
        } 
        else 
        { 
            throw new Exception("This virtual directory is not exists."); 
        } 

       
    //删除一个虚拟目录 
    public void Delete(string strVirdir) 

        if(_virdirs.Contains(strVirdir)) 
        { 
            object[] paras = new object[2]; 
            paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录 
            paras[1] = strVirdir; 
            rootfolder.Invoke("Delete",paras); 
            rootfolder.CommitChanges(); 
        } 
        else 
        { 
            throw new Exception("Can't delete " + strVirdir + ",because it isn't exists."); 
        } 

    //批量更新 
    public void UpdateBatch() 

        BatchUpdate(_virdirs); 

    //重载一个:-) 
    public void UpdateBatch(VirtualDirectories vds) 

        BatchUpdate(vds); 

      
    ///<summary> 
    ///私有方法 
    ///</summary> //连接服务器 
    private void ConnectToServer() 

        string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT"; 
        try 
        { 
            this.rootfolder = new DirectoryEntry(strPath); 
            _virdirs = GetVirDirs(this.rootfolder.Children); 
        }  
        catch(Exception e) 
        { 
            throw new Exception("Can't connect to the server ["+ _server +"] ...",e); 
        } 

      

  3.   

    //执行批量更新 
    private void BatchUpdate(VirtualDirectories vds) 

        _batchflag = true; 
        foreach(object item in vds.Values) 
        { 
            VirtualDirectory vd = (VirtualDirectory)item; 
            switch(vd.flag) 
            { 
                case 0: 
                    break; 
                case 1: 
                    Create(vd); 
                    break; 
                case 2: 
                    Update(vd); 
                    break; 
            } 
        } 
        _batchflag = false; 

    //更新东东 
    private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd) 

        de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName; 
        de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass; 
        de.Properties["AccessRead"][0] = vd.AccessRead; 
        de.Properties["AccessExecute"][0] = vd.AccessExecute; 
        de.Properties["AccessWrite"][0] = vd.AccessWrite; 
        de.Properties["AuthBasic"][0] = vd.AuthBasic; 
        de.Properties["AuthNTLM"][0] = vd.AuthNTLM; 
        de.Properties["ContentIndexed"][0] = vd.ContentIndexed; 
        de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc; 
        de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing; 
        de.Properties["AccessSSL"][0] = vd.AccessSSL; 
        de.Properties["AccessScript"][0] = vd.AccessScript; 
        de.Properties["DefaultDoc"][0] = vd.DefaultDoc; 
        de.Properties["Path"][0] = vd.Path; 
        de.CommitChanges(); 
    } //获取虚拟目录集合 
    private VirtualDirectories GetVirDirs(DirectoryEntries des) 

        VirtualDirectories tmpdirs = new VirtualDirectories(); 
        foreach(DirectoryEntry de in des) 
        { 
            if(de.SchemaClassName == "IIsWebVirtualDir") 
            { 
                VirtualDirectory vd = new VirtualDirectory(); 
                vd.Name = de.Name; 
                vd.AccessRead = (bool)de.Properties["AccessRead"][0]; 
                vd.AccessExecute = (bool)de.Properties["AccessExecute"][0]; 
                vd.AccessWrite = (bool)de.Properties["AccessWrite"][0]; 
                vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0]; 
                vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0]; 
                vd.AuthBasic = (bool)de.Properties["AuthBasic"][0]; 
                vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0]; 
                vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0]; 
                vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0]; 
                vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0]; 
                vd.AccessSSL = (bool)de.Properties["AccessSSL"][0]; 
                vd.AccessScript = (bool)de.Properties["AccessScript"][0]; 
                vd.Path = (string)de.Properties["Path"][0]; 
                vd.flag = 0; 
                vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0]; 
                tmpdirs.Add(vd.Name,vd); 
             } 
        } 
        return tmpdirs; 
    } } 
    /// <summary> 
    /// VirtualDirectory类 
    /// </summary> 
    public class VirtualDirectory 

        private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc; 
        private string _ausername,_auserpass,_name,_path; 
        private int _flag; 
        private string _defaultdoc; 
        /// <summary> 
        /// 构造函数 
        /// </summary> 
        public VirtualDirectory() 
        { 
            SetValue(); 
        } 
        public VirtualDirectory(string strVirDirName) 
        { 
            _name = strVirDirName; 
            SetValue(); 
        } 
        private void SetValue() 
        { 
            _read = true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false; 
            _indexed = false;_endirbrow=false;_endefaultdoc = false; 
            _flag = 1; 
            _defaultdoc = "default.htm,default.aspx,default.asp,index.htm"; 
            _path = "C:\\"; 
            _ausername = "";_auserpass ="";_name=""; 
        } 
        ///<summary> 
        ///定义属性,IISVirtualDir太多属性了 
        ///我只搞了比较重要的一些,其它的大伙需要的自个加吧。 
        ///</summary>     public int flag 
        { 
            get{ return _flag;} 
            set{ _flag = value;} 
        } 
        public bool AccessRead 
        { 
            get{ return _read;} 
            set{ _read = value;} 
        } 
        public bool AccessWrite 
        { 
            get{ return _write;} 
            set{ _write = value;} 
        } 
        public bool AccessExecute 
        { 
            get{ return _execute;} 
            set{ _execute = value;} 
        } 
        public bool AccessSSL 
        { 
            get{ return _ssl;} 
            set{ _ssl = value;} 
        } 
        public bool AccessScript 
        { 
            get{ return _script;} 
            set{ _script = value;} 
        } 
        public bool AuthBasic 
        { 
            get{ return _authbasic;} 
            set{ _authbasic = value;} 
        } 
        public bool AuthNTLM 
        { 
            get{ return _authntlm;} 
            set{ _authntlm = value;} 
        } 
        public bool ContentIndexed 
        { 
            get{ return _indexed;} 
            set{ _indexed = value;} 
        } 
        public bool EnableDirBrowsing 
        { 
            get{ return _endirbrow;} 
            set{ _endirbrow = value;} 
        } 
        public bool EnableDefaultDoc 
        { 
            get{ return _endefaultdoc;} 
            set{ _endefaultdoc = value;} 
        } 
        public string Name 
        { 
            get{ return _name;} 
            set{ _name = value;} 
        } 
        public string Path 
        { 
            get{ return _path;} 
            set{ _path = value;} 
        } 
        public string DefaultDoc 
        { 
            get{ return _defaultdoc;} 
            set{ _defaultdoc = value;} 
        } 
        public string AnonymousUserName 
        { 
            get{ return _ausername;} 
            set{ _ausername = value;} 
        } 
        public string AnonymousUserPass 
        { 
            get{ return _auserpass;} 
            set{ _auserpass = value;} 
        } 

    /// <summary> 
    /// 集合VirtualDirectories 
    /// </summary> public class VirtualDirectories : System.Collections.Hashtable 

        public VirtualDirectories() 
        { 
        } 
        //添加新的方法  
        public VirtualDirectory Find(string strName) 
        { 
            return (VirtualDirectory)this[strName]; 
        } 


      

  4.   

    这些都是操作IIS的虚拟目录的,我现在手头有200多的website的属性,真是痛苦啊!
    要慢慢试了!