VB.Net控制IIS的完整源代码

这个博客展示了如何使用VB.Net来控制IIS服务器,包括启动、停止、状态检查以及配置IISWebServer的各种属性。通过`DirectoryEntry`和`DirectoryServices`进行操作,提供了详细的类和方法实现。

 每段都是一个文件,代码如下:

  1. Imports System
  2. Imports System.DirectoryServices
  3. Imports System.Collections
  4. Namespace OPS.Component
  5.     ' IISWebServer的状态 
  6.     Public Enum IISServerState
  7.         Starting = 1
  8.         Started = 2
  9.         Stopping = 3
  10.         Stopped = 4
  11.         Pausing = 5
  12.         Paused = 6
  13.         Continuing = 7
  14.     End Enum
  15. End Namespace

 

  1. Imports System
  2. Imports System.Collections
  3. Imports System.Collections.Generic
  4. Imports System.Text
  5. Imports System.DirectoryServices
  6. Namespace OPS.Component
  7.     'IISWebServer 
  8.     Public Class IISWebServer
  9.         Friend index As Integer = -1
  10.         Public WebVirtualDirs As IISWebVirtualDirCollection
  11.         ''' <summary> 
  12.         ''' 网站说明 
  13.         ''' </summary> 
  14.         Public ServerComment As String = "Way"
  15.         ''' <summary> 
  16.         ''' 脚本支持 
  17.         ''' </summary> 
  18.         Public AccessScript As Boolean = True
  19.         ''' <summary> 
  20.         ''' 读取 
  21.         ''' </summary> 
  22.         Public AccessRead As Boolean = True
  23.         ''' <summary> 
  24.         ''' 物理路径 
  25.         ''' </summary> 
  26.         Public Path As String = "c:/"
  27.         ''' <summary> 
  28.         ''' 端口 
  29.         ''' </summary> 
  30.         Public Port As Integer = 80
  31.         ''' <summary> 
  32.         ''' 目录浏览 
  33.         ''' </summary> 
  34.         Public EnableDirBrowsing As Boolean = False
  35.         ''' <summary> 
  36.         ''' 默认文档 
  37.         ''' </summary> 
  38.         Public DefaultDoc As String = "index.aspx"
  39.         ''' <summary> 
  40.         ''' 使用默认文档 
  41.         ''' </summary> 
  42.         Public EnableDefaultDoc As Boolean = True
  43.         ''' <summary> 
  44.         ''' IISWebServer的状态 
  45.         ''' </summary> 
  46.         Public ReadOnly Property ServerState() As IISServerState
  47.             Get
  48.                 Dim server As DirectoryEntry = IISManagement.returnIISWebserver(Me.index)
  49.                 If server Is Nothing Then
  50.                     Throw (New Exception("找不到此IISWebServer"))
  51.                 End If
  52.                 Select Case server.Properties("ServerState")(0).ToString()
  53.                     Case "2"
  54.                         Return IISServerState.Started
  55.                     Case "4"
  56.                         Return IISServerState.Stopped
  57.                     Case "6"
  58.                         Return IISServerState.Paused
  59.                 End Select
  60.                 Return IISServerState.Stopped
  61.             End Get
  62.         End Property
  63.         ''' <summary> 
  64.         ''' 停止IISWebServer 
  65.         ''' </summary> 
  66.         Public Sub [Stop]()
  67.             Dim Server As DirectoryEntry
  68.             If index = -1 Then
  69.                 Throw (New Exception("在IIS找不到此IISWebServer!"))
  70.             End If
  71.             Try
  72.                 Server = New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index)
  73.                 If Server IsNot Nothing Then
  74.                     Server.Invoke("stop"New Object(-1) {})
  75.                 Else
  76.                     Throw (New Exception("在IIS找不到此IISWebServer!"))
  77.                 End If
  78.             Catch
  79.                 Throw (New Exception("在IIS找不到此IISWebServer!"))
  80.             End Try
  81.         End Sub
  82.         ''' <summary> 
  83.         ''' 把基本信息的更改更新到IIS 
  84.         ''' </summary> 
  85.         Public Sub CommitChanges()
  86.             IISManagement.EditIISWebServer(Me)
  87.         End Sub
  88.         ''' <summary> 
  89.         ''' 启动IISWebServer 
  90.         ''' </summary> 
  91.         Public Sub Start()
  92.             If index = -1 Then
  93.                 Throw (New Exception("在IIS找不到此IISWebServer!"))
  94.             End If
  95.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  96.             Dim Server As DirectoryEntry
  97.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  98.             While ie.MoveNext()
  99.                 Server = DirectCast(ie.Current, DirectoryEntry)
  100.                 If Server.SchemaClassName = "IIsWebServer" Then
  101.                     If Server.Properties("Serverbindings")(0).ToString() = ":" + Me.Port + ":" Then
  102.                         Server.Invoke("stop"New Object(-1) {})
  103.                     End If
  104.                 End If
  105.             End While
  106.             Try
  107.                 Server = New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index)
  108.                 If Server IsNot Nothing Then
  109.                     Server.Invoke("start"New Object(-1) {})
  110.                 Else
  111.                     Throw (New Exception("在IIS找不到此IISWebServer!"))
  112.                 End If
  113.             Catch
  114.                 Throw (New Exception("在IIS找不到此IISWebServer!"))
  115.             End Try
  116.         End Sub
  117.         Public Sub New()
  118.             WebVirtualDirs = New IISWebVirtualDirCollection(Me)
  119.         End Sub
  120.     End Class
  121. End Namespace

 

 

  1. Imports System
  2. Imports System.Collections
  3. Imports System.Collections.Generic
  4. Imports System.Text
  5. Namespace OPS.Component
  6.     ''' <summary> 
  7.     ''' IISWebServerCollection 
  8.     ''' </summary> 
  9.     Public Class IISWebServerCollection
  10.         Inherits CollectionBase
  11.         Default Public ReadOnly Property Item(ByVal Index As IntegerAs IISWebServer
  12.             Get
  13.                 Return DirectCast(Me.List(Index), IISWebServer)
  14.             End Get
  15.         End Property
  16.         Default Public ReadOnly Property Item(ByVal ServerComment As StringAs IISWebServer
  17.             Get
  18.                 ServerComment = ServerComment.ToLower().Trim()
  19.                 Dim list As IISWebServer
  20.                 For i As Integer = 0 To Me.List.Count - 1
  21.                     list = DirectCast(Me.List(i), IISWebServer)
  22.                     If list.ServerComment.ToLower().Trim() = ServerComment Then
  23.                         Return list
  24.                     End If
  25.                 Next
  26.                 Return Nothing
  27.             End Get
  28.         End Property
  29.         Friend Sub Add_(ByVal WebServer As IISWebServer)
  30.             Me.List.Add(WebServer)
  31.         End Sub
  32.         Public Sub Add(ByVal WebServer As IISWebServer)
  33.             Try
  34.                 Me.List.Add(WebServer)
  35.                 IISManagement.CreateIISWebServer(WebServer)
  36.             Catch
  37.                 Throw (New Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"))
  38.             End Try
  39.         End Sub
  40.         ''' <summary> 
  41.         ''' 是否包含指定的网站 
  42.         ''' </summary> 
  43.         ''' <param name="ServerComment"></param> 
  44.         ''' <returns></returns> 
  45.         Public Function Contains(ByVal ServerComment As StringAs Boolean
  46.             ServerComment = ServerComment.ToLower().Trim()
  47.             For i As Integer = 0 To Me.List.Count - 1
  48.                 Dim server As IISWebServer = Me(i)
  49.                 If server.ServerComment.ToLower().Trim() = ServerComment Then
  50.                     Return True
  51.                 End If
  52.             Next
  53.             Return False
  54.         End Function
  55.         ''' <summary> 
  56.         ''' 是否包含指定的网站 
  57.         ''' </summary> 
  58.         ''' <param name="index"></param> 
  59.         ''' <returns></returns> 
  60.         Public Function Contains(ByVal index As IntegerAs Boolean
  61.             For i As Integer = 0 To Me.List.Count - 1
  62.                 Dim server As IISWebServer = Me(i)
  63.                 If server.index = index Then
  64.                     Return True
  65.                 End If
  66.             Next
  67.             Return False
  68.         End Function
  69.         Public Sub AddRange(ByVal WebServers As IISWebServer())
  70.             For i As Integer = 0 To WebServers.GetUpperBound(0)
  71.                 Add(WebServers(i))
  72.             Next
  73.         End Sub
  74.         Public Sub Remove(ByVal WebServer As IISWebServer)
  75.             For i As Integer = 0 To Me.List.Count - 1
  76.                 If DirectCast(Me.List(i), IISWebServer) = WebServer Then
  77.                     Me.List.RemoveAt(i)
  78.                     Return
  79.                 End If
  80.             Next
  81.             IISManagement.RemoveIISWebServer(WebServer.index)
  82.         End Sub
  83.     End Class
  84. End Namespace

 

 

  1. Imports System
  2. Imports System.Collections.Generic
  3. Imports System.Text
  4. Namespace OPS.Component
  5.     ''' <summary> 
  6.     ''' IISWebVirtualDir 
  7.     ''' </summary> 
  8.     Public Class IISWebVirtualDir
  9.         Public Parent As IISWebServer = Nothing
  10.         ''' <summary> 
  11.         ''' 虚拟目录名称 
  12.         ''' </summary> 
  13.         Public Name As String = "Way"
  14.         ''' <summary> 
  15.         ''' 读取 
  16.         ''' </summary> 
  17.         Public AccessRead As Boolean = True
  18.         ''' <summary> 
  19.         ''' 脚本支持 
  20.         ''' </summary> 
  21.         Public AccessScript As Boolean = True
  22.         ''' <summary> 
  23.         ''' 物理路径 
  24.         ''' </summary> 
  25.         Public Path As String = "c:/"
  26.         ''' <summary> 
  27.         ''' 默认文档 
  28.         ''' </summary> 
  29.         Public DefaultDoc As String = "index.aspx"
  30.         ''' <summary> 
  31.         ''' 使用默认文档 
  32.         ''' </summary> 
  33.         Public EnableDefaultDoc As Boolean = True
  34.         ''' <summary> 
  35.         ''' 所属的网站的网站说明 
  36.         ''' </summary> 
  37.         Public WebServer As String = ""
  38.         Public Sub New(ByVal WebServerName As String)
  39.             If WebServerName.ToString() = "" Then
  40.                 Throw (New Exception("WebServerName不能为空!"))
  41.             End If
  42.             Me.WebServer = WebServerName
  43.         End Sub
  44.         Public Sub New()
  45.         End Sub
  46.     End Class
  47. End Namespace

 

 

  1. Imports System
  2. Imports System.Collections
  3. Imports System.Collections.Generic
  4. Imports System.Text
  5. Namespace OPS.Component
  6.     ''' <summary> 
  7.     ''' IISWebVirtualDirCollection 
  8.     ''' </summary> 
  9.     Public Class IISWebVirtualDirCollection
  10.         Inherits CollectionBase
  11.         Public Parent As IISWebServer = Nothing
  12.         Default Public ReadOnly Property Item(ByVal Index As IntegerAs IISWebVirtualDir
  13.             Get
  14.                 Return DirectCast(Me.List(Index), IISWebVirtualDir)
  15.             End Get
  16.         End Property
  17.         Default Public ReadOnly Property Item(ByVal Name As StringAs IISWebVirtualDir
  18.             Get
  19.                 Name = Name.ToLower()
  20.                 Dim list As IISWebVirtualDir
  21.                 For i As Integer = 0 To Me.List.Count - 1
  22.                     list = DirectCast(Me.List(i), IISWebVirtualDir)
  23.                     If list.Name.ToLower() = Name Then
  24.                         Return list
  25.                     End If
  26.                 Next
  27.                 Return Nothing
  28.             End Get
  29.         End Property
  30.         Friend Sub Add_(ByVal WebVirtualDir As IISWebVirtualDir)
  31.             Try
  32.                 Me.List.Add(WebVirtualDir)
  33.             Catch
  34.                 Throw (New Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"))
  35.             End Try
  36.         End Sub
  37.         Public Sub Add(ByVal WebVirtualDir As IISWebVirtualDir)
  38.             WebVirtualDir.Parent = Me.Parent
  39.             Try
  40.                 Me.List.Add(WebVirtualDir)
  41.             Catch
  42.                 Throw (New Exception("发生意外错误,可能是某节点将该节点的上级节点作为它自己的子级插入"))
  43.             End Try
  44.             IISManagement.CreateIISWebVirtualDir(WebVirtualDir, True)
  45.         End Sub
  46.         Public Sub AddRange(ByVal WebVirtualDirs As IISWebVirtualDir())
  47.             For i As Integer = 0 To WebVirtualDirs.GetUpperBound(0)
  48.                 Add(WebVirtualDirs(i))
  49.             Next
  50.         End Sub
  51.         Public Sub Remove(ByVal WebVirtualDir As IISWebVirtualDir)
  52.             For i As Integer = 0 To Me.List.Count - 1
  53.                 If DirectCast(Me.List(i), IISWebVirtualDir) = WebVirtualDir Then
  54.                     Me.List.RemoveAt(i)
  55.                     IISManagement.RemoveIISWebVirtualDir(WebVirtualDir)
  56.                     Return
  57.                 End If
  58.             Next
  59.         End Sub
  60.         Public Sub New(ByVal Parent As IISWebServer)
  61.             Me.Parent = Parent
  62.         End Sub
  63.     End Class
  64. End Namespace

 

 

  1. Imports System
  2. Imports System.Collections
  3. Imports System.Collections.Generic
  4. Imports System.Text
  5. Imports System.DirectoryServices
  6. Namespace OPS.Component
  7.     ''' <summary> 
  8.     ''' IISManagement 的摘要说明。
  9.     ''' </summary> 
  10.     Public Class IISManagement
  11.         Public WebServers As New IISWebServerCollection()
  12.         Friend Shared Machinename As String = "localhost"
  13.         Public Sub New()
  14.             start()
  15.         End Sub
  16.         ''' <param name="MachineName">机器名,默认值为localhost</param> 
  17.         Public Sub New(ByVal MachineName__1 As String)
  18.             If MachineName__1.ToString() <> "" Then
  19.                 Machinename = MachineName__1
  20.             End If
  21.             start()
  22.         End Sub
  23.         Private Sub start()
  24.             Dim Service As New DirectoryEntry("IIS://" + Machinename + "/W3SVC")
  25.             Dim Server As DirectoryEntry
  26.             Dim Root As DirectoryEntry = Nothing
  27.             Dim VirDir As DirectoryEntry
  28.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  29.             Dim ieRoot As IEnumerator
  30.             Dim item As IISWebServer
  31.             Dim item_virdir As IISWebVirtualDir
  32.             Dim finded As Boolean = False
  33.             While ie.MoveNext()
  34.                 Server = DirectCast(ie.Current, DirectoryEntry)
  35.                 If Server.SchemaClassName = "IIsWebServer" Then
  36.                     item = New IISWebServer()
  37.                     item.index = Convert.ToInt32(Server.Name)
  38.                     item.ServerComment = DirectCast(Server.Properties("ServerComment")(0), String)
  39.                     item.AccessRead = CBool(Server.Properties("AccessRead")(0))
  40.                     item.AccessScript = CBool(Server.Properties("AccessScript")(0))
  41.                     item.DefaultDoc = DirectCast(Server.Properties("DefaultDoc")(0), String)
  42.                     item.EnableDefaultDoc = CBool(Server.Properties("EnableDefaultDoc")(0))
  43.                     item.EnableDirBrowsing = CBool(Server.Properties("EnableDirBrowsing")(0))
  44.                     ieRoot = Server.Children.GetEnumerator()
  45.                     While ieRoot.MoveNext()
  46.                         Root = DirectCast(ieRoot.Current, DirectoryEntry)
  47.                         If Root.SchemaClassName = "IIsWebVirtualDir" Then
  48.                             finded = True
  49.                             Exit While
  50.                         End If
  51.                     End While
  52.                     If finded Then
  53.                         item.Path = Root.Properties("path")(0).ToString()
  54.                     End If
  55.                     item.Port = Convert.ToInt32(DirectCast(Server.Properties("Serverbindings")(0), String).Substring(1, (DirectCast(Server.Properties("Serverbindings")(0), String)).Length - 2))
  56.                     Me.WebServers.Add_(item)
  57.                     ieRoot = Root.Children.GetEnumerator()
  58.                     While ieRoot.MoveNext()
  59.                         VirDir = DirectCast(ieRoot.Current, DirectoryEntry)
  60.                         If VirDir.SchemaClassName <> "IIsWebVirtualDir" AndAlso VirDir.SchemaClassName <> "IIsWebDirectory" Then
  61.                             Continue While
  62.                         End If
  63.                         item_virdir = New IISWebVirtualDir(item.ServerComment)
  64.                         item_virdir.Name = VirDir.Name
  65.                         item_virdir.AccessRead = CBool(VirDir.Properties("AccessRead")(0))
  66.                         item_virdir.AccessScript = CBool(VirDir.Properties("AccessScript")(0))
  67.                         item_virdir.DefaultDoc = DirectCast(VirDir.Properties("DefaultDoc")(0), String)
  68.                         item_virdir.EnableDefaultDoc = CBool(VirDir.Properties("EnableDefaultDoc")(0))
  69.                         If VirDir.SchemaClassName = "IIsWebVirtualDir" Then
  70.                             item_virdir.Path = DirectCast(VirDir.Properties("Path")(0), String)
  71.                         ElseIf VirDir.SchemaClassName = "IIsWebDirectory" Then
  72.                             item_virdir.Path = Root.Properties("Path")(0) + "/" + VirDir.Name
  73.                         End If
  74.                         item.WebVirtualDirs.Add_(item_virdir)
  75.                     End While
  76.                 End If
  77.             End While
  78.         End Sub
  79.         ''' <summary> 
  80.         ''' 创建站点
  81.         ''' </summary> 
  82.         ''' <param name="iisServer"></param> 
  83.         Public Shared Sub CreateIISWebServer(ByVal iisServer As IISWebServer)
  84.             If iisServer.ServerComment.ToString() = "" Then
  85.                 Throw (New Exception("IISWebServer的ServerComment不能为空!"))
  86.             End If
  87.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  88.             Dim Server As DirectoryEntry
  89.             Dim i As Integer = 0
  90.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  91.             While ie.MoveNext()
  92.                 Server = DirectCast(ie.Current, DirectoryEntry)
  93.                 If Server.SchemaClassName = "IIsWebServer" Then
  94.                     If Convert.ToInt32(Server.Name) > i Then
  95.                         i = Convert.ToInt32(Server.Name)
  96.                     End If
  97.                 End If
  98.             End While
  99.             i += 1
  100.             Try
  101.                 iisServer.index = i
  102.                 Server = Service.Children.Add(i.ToString(), "IIsWebServer")
  103.                 Server.Properties("ServerComment")(0) = iisServer.ServerComment
  104.                 Server.Properties("Serverbindings").Add(":" + iisServer.Port + ":")
  105.                 Server.Properties("AccessScript")(0) = iisServer.AccessScript
  106.                 Server.Properties("AccessRead")(0) = iisServer.AccessRead
  107.                 Server.Properties("EnableDirBrowsing")(0) = iisServer.EnableDirBrowsing
  108.                 Server.Properties("DefaultDoc")(0) = iisServer.DefaultDoc
  109.                 Server.Properties("EnableDefaultDoc")(0) = iisServer.EnableDefaultDoc
  110.                 Dim root As DirectoryEntry = Server.Children.Add("Root""IIsWebVirtualDir")
  111.                 root.Properties("path")(0) = iisServer.Path
  112.                 Service.CommitChanges()
  113.                 Server.CommitChanges()
  114.                 root.CommitChanges()
  115.                 root.Invoke("AppCreate2"New Object(0) {2})
  116.                 'Server.Invoke("start",new object[0]); 
  117.             Catch es As Exception
  118.                 Throw (es)
  119.             End Try
  120.         End Sub
  121.         ''' <summary> 
  122.         ''' 删除IISWebServer 
  123.         ''' </summary> 
  124.         Public Shared Sub RemoveIISWebServer(ByVal ServerComment As String)
  125.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  126.             Dim Server As DirectoryEntry
  127.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  128.             ServerComment = ServerComment.ToLower()
  129.             While ie.MoveNext()
  130.                 Server = DirectCast(ie.Current, DirectoryEntry)
  131.                 If Server.SchemaClassName = "IIsWebServer" Then
  132.                     If Server.Properties("ServerComment")(0).ToString().ToLower() = ServerComment Then
  133.                         Service.Children.Remove(Server)
  134.                         Service.CommitChanges()
  135.                         Return
  136.                     End If
  137.                 End If
  138.             End While
  139.         End Sub
  140.         ''' <summary> 
  141.         ''' 删除IISWebServer 
  142.         ''' </summary> 
  143.         Public Shared Sub RemoveIISWebServer(ByVal index As Integer)
  144.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  145.             Try
  146.                 Dim Server As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index)
  147.                 If Server IsNot Nothing Then
  148.                     Service.Children.Remove(Server)
  149.                     Service.CommitChanges()
  150.                 Else
  151.                     Throw (New Exception("找不到此IISWebServer"))
  152.                 End If
  153.             Catch
  154.                 Throw (New Exception("找不到此IISWebServer"))
  155.             End Try
  156.         End Sub
  157.         ''' <summary> 
  158.         ''' 检查是否存在IISWebServer 
  159.         ''' </summary> 
  160.         ''' <param name="ServerComment">网站说明</param> 
  161.         ''' <returns></returns> 
  162.         Public Shared Function ExistsIISWebServer(ByVal ServerComment As StringAs Boolean
  163.             ServerComment = ServerComment.Trim()
  164.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  165.             Dim Server As DirectoryEntry = Nothing
  166.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  167.             Dim comment As String
  168.             While ie.MoveNext()
  169.                 Server = DirectCast(ie.Current, DirectoryEntry)
  170.                 If Server.SchemaClassName = "IIsWebServer" Then
  171.                     comment = Server.Properties("ServerComment")(0).ToString().ToLower().Trim()
  172.                     If comment = ServerComment.ToLower() Then
  173.                         Return True
  174.                     End If
  175.                 End If
  176.             End While
  177.             Return False
  178.         End Function
  179.         ''' <summary> 
  180.         ''' 返回指定的IISWebServer 
  181.         ''' </summary> 
  182.         ''' <param name="ServerComment"></param> 
  183.         ''' <returns></returns> 
  184.         Friend Shared Function returnIISWebserver(ByVal ServerComment As StringAs DirectoryEntry
  185.             ServerComment = ServerComment.Trim()
  186.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  187.             Dim Server As DirectoryEntry = Nothing
  188.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  189.             Dim comment As String
  190.             While ie.MoveNext()
  191.                 Server = DirectCast(ie.Current, DirectoryEntry)
  192.                 If Server.SchemaClassName = "IIsWebServer" Then
  193.                     comment = Server.Properties("ServerComment")(0).ToString().ToLower().Trim()
  194.                     If comment = ServerComment.ToLower() Then
  195.                         Return Server
  196.                     End If
  197.                 End If
  198.             End While
  199.             Return Nothing
  200.         End Function
  201.         ''' <summary> 
  202.         ''' 返回指定的IISWebServer 
  203.         ''' </summary> 
  204.         ''' <param name="index"></param> 
  205.         ''' <returns></returns> 
  206.         Friend Shared Function returnIISWebserver(ByVal index As IntegerAs DirectoryEntry
  207.             Dim Server As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC/" + index)
  208.             Try
  209.                 Dim ie As IEnumerator = Server.Children.GetEnumerator()
  210.                 Return Server
  211.             Catch
  212.                 Return Nothing
  213.             End Try
  214.         End Function
  215.         Private Shared Function getRoot(ByVal Server As DirectoryEntry) As DirectoryEntry
  216.             For Each child As DirectoryEntry In Server.Children
  217.                 Dim name As String = child.Name.ToLower()
  218.                 If name = "iiswebvirtualdir" OrElse name = "root" Then
  219.                     Return child
  220.                 End If
  221.             Next
  222.             Return Nothing
  223.         End Function
  224.         ''' <summary> 
  225.         ''' 修改与给定的IISWebServer具有相同网站说明的站点配置
  226.         ''' </summary> 
  227.         ''' <param name="iisServer">给定的IISWebServer</param> 
  228.         Public Shared Sub EditIISWebServer(ByVal iisServer As IISWebServer)
  229.             If iisServer.index = -1 Then
  230.                 Throw (New Exception("找不到给定的站点!"))
  231.             End If
  232.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  233.             Dim Server As DirectoryEntry
  234.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  235.             While ie.MoveNext()
  236.                 Server = DirectCast(ie.Current, DirectoryEntry)
  237.                 If Server.SchemaClassName = "IIsWebServer" Then
  238.                     If Server.Properties("Serverbindings")(0).ToString() = ":" + iisServer.Port + ":" Then
  239.                         Server.Invoke("stop"New Object(-1) {})
  240.                     End If
  241.                 End If
  242.             End While
  243.             Server = returnIISWebserver(iisServer.index)
  244.             If Server Is Nothing Then
  245.                 Throw (New Exception("找不到给定的站点!"))
  246.             End If
  247.             Try
  248.                 Server.Properties("ServerComment")(0) = iisServer.ServerComment
  249.                 Server.Properties("Serverbindings")(0) = ":" + iisServer.Port + ":"
  250.                 Server.Properties("AccessScript")(0) = iisServer.AccessScript
  251.                 Server.Properties("AccessRead")(0) = iisServer.AccessRead
  252.                 Server.Properties("EnableDirBrowsing")(0) = iisServer.EnableDirBrowsing
  253.                 Server.Properties("DefaultDoc")(0) = iisServer.DefaultDoc
  254.                 Server.Properties("EnableDefaultDoc")(0) = iisServer.EnableDefaultDoc
  255.                 Dim root As DirectoryEntry = getRoot(Server)
  256.                 Server.CommitChanges()
  257.                 If root IsNot Nothing Then
  258.                     root.Properties("path")(0) = iisServer.Path
  259.                     root.CommitChanges()
  260.                 End If
  261.                 Server.Invoke("start"New Object(-1) {})
  262.             Catch es As Exception
  263.                 Throw (es)
  264.             End Try
  265.         End Sub
  266.         ''' <summary> 
  267.         ''' 返回所有站点的网站说明
  268.         ''' </summary> 
  269.         ''' <returns></returns> 
  270.         Public Shared Function returnIISServerComment() As ArrayList
  271.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  272.             Dim Server As DirectoryEntry
  273.             Dim list As New ArrayList()
  274.             Dim ie As IEnumerator = Service.Children.GetEnumerator()
  275.             While ie.MoveNext()
  276.                 Server = DirectCast(ie.Current, DirectoryEntry)
  277.                 If Server.SchemaClassName = "IIsWebServer" Then
  278.                     list.Add(Server.Properties("ServerComment")(0))
  279.                 End If
  280.             End While
  281.             Return list
  282.         End Function
  283.         ''' <summary> 
  284.         ''' 创建虚拟目录
  285.         ''' </summary> 
  286.         ''' <param name="iisVir"></param> 
  287.         ''' <param name="deleteIfExist"></param> 
  288.         Public Shared Sub CreateIISWebVirtualDir(ByVal iisVir As IISWebVirtualDir, ByVal deleteIfExist As Boolean)
  289.             If iisVir.Parent Is Nothing Then
  290.                 Throw (New Exception("IISWebVirtualDir没有所属的IISWebServer!"))
  291.             End If
  292.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  293.             Dim Server As DirectoryEntry = returnIISWebserver(iisVir.Parent.index)
  294.             If Server Is Nothing Then
  295.                 Throw (New Exception("找不到给定的站点!"))
  296.             End If
  297.             Server = getRoot(Server)
  298.             If deleteIfExist Then
  299.                 For Each VirDir As DirectoryEntry In Server.Children
  300.                     If VirDir.Name.ToLower().Trim() = iisVir.Name.ToLower() Then
  301.                         Server.Children.Remove(VirDir)
  302.                         Server.CommitChanges()
  303.                         Exit For
  304.                     End If
  305.                 Next
  306.             End If
  307.             Try
  308.                 Dim vir As DirectoryEntry
  309.                 vir = Server.Children.Add(iisVir.Name, "IIsWebVirtualDir")
  310.                 vir.Properties("Path")(0) = iisVir.Path
  311.                 vir.Properties("DefaultDoc")(0) = iisVir.DefaultDoc
  312.                 vir.Properties("EnableDefaultDoc")(0) = iisVir.EnableDefaultDoc
  313.                 vir.Properties("AccessScript")(0) = iisVir.AccessScript
  314.                 vir.Properties("AccessRead")(0) = iisVir.AccessRead
  315.                 vir.Invoke("AppCreate2"New Object(0) {2})
  316.                 Server.CommitChanges()
  317.                 vir.CommitChanges()
  318.             Catch es As Exception
  319.                 Throw (es)
  320.             End Try
  321.         End Sub
  322.         ''' <summary> 
  323.         ''' 删除虚拟目录
  324.         ''' </summary> 
  325.         ''' <param name="WebServerComment">站点说明</param> 
  326.         ''' <param name="VirtualDir">虚拟目录名称</param> 
  327.         Public Shared Sub RemoveIISWebVirtualDir(ByVal WebServerComment As StringByVal VirtualDir As String)
  328.             VirtualDir = VirtualDir.ToLower()
  329.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  330.             Dim Server As DirectoryEntry = returnIISWebserver(WebServerComment)
  331.             If Server Is Nothing Then
  332.                 Throw (New Exception("找不到给定的站点!"))
  333.             End If
  334.             Server = getRoot(Server)
  335.             For Each VirDir As DirectoryEntry In Server.Children
  336.                 If VirDir.Name.ToLower().Trim() = VirtualDir Then
  337.                     Server.Children.Remove(VirDir)
  338.                     Server.CommitChanges()
  339.                     Return
  340.                 End If
  341.             Next
  342.             Throw (New Exception("找不到给定的虚拟目录!"))
  343.         End Sub
  344.         ''' 删除虚拟目录
  345.         Public Shared Sub RemoveIISWebVirtualDir(ByVal iisVir As IISWebVirtualDir)
  346.             Dim Service As New DirectoryEntry("IIS://" + IISManagement.Machinename + "/W3SVC")
  347.             Dim Server As DirectoryEntry = returnIISWebserver(iisVir.Parent.index)
  348.             If Server Is Nothing Then
  349.                 Throw (New Exception("找不到给定的站点!"))
  350.             End If
  351.             Server = getRoot(Server)
  352.             For Each VirDir As DirectoryEntry In Server.Children
  353.                 If VirDir.Name.ToLower().Trim() = iisVir.Name.ToLower() Then
  354.                     Server.Children.Remove(VirDir)
  355.                     Server.CommitChanges()
  356.                     Return
  357.                 End If
  358.             Next
  359.             Throw (New Exception("找不到给定的虚拟目录!"))
  360.         End Sub
  361.     End Class
  362. End Namespace
PS:参考版为C#,来源已无法考证。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值