一个关于IIS的类

该博客主要展示了使用IIS创建网站和应用程序的代码实现。通过定义IISManager类,实现了创建网站、设置网站属性、创建应用程序虚拟目录等功能,还包含创建物理目录和欢迎页面的方法,同时定义了WebSite和LogExtFileFlags类用于管理网站和日志文件标志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Imports System

Imports System.DirectoryServices

Imports System.IO

Public Class IISManager 

    Public Shared Function CreateWebSite(ByVal webSiteName As String, ByVal pathToRoot As String) As WebSite

        Dim root As DirectoryEntry = New DirectoryEntry("IIS://localhost/W3SVC") 

        ' Find unused ID value for new web site

        Dim siteID As Integer = 1

        Dim e As DirectoryEntry

        For Each e In root.Children

            If e.SchemaClassName = "IIsWebServer" Then

                Dim ID As Integer = Convert.ToInt32(e.Name)

                If ID >= siteID Then

                    siteID = ID + 1

                End If

            End If

        Next

        ' Create the root directory and welcome html file

        CreatePhysicalDirectory(pathToRoot, webSiteName) 

        ' Create web site

        Dim site As New WebSite(CType(root.Invoke("Create", "IIsWebServer", siteID), DirectoryEntry))

        site.ServerComment = webSiteName

        'site.KeyType = "IIsWebServer"

        site.ServerBindings = ":80:" + webSiteName

        site.MaxBandwidth = "1048576"

        site.ServerState = 2

        site.LogFlags.LogExtFileFlags = 340871        

        site.FrontPageWeb = 1

        'site.DefaultDoc = "Default.aspx"

        'site.SecureBindings = ":443:" + webSiteName

        site.ServerAutoStart = 1

        site.ServerSize = 1 

        site.SetInfo()

        ' Create application virtual directory

        Dim siteVDir As DirectoryEntry = site.Children.Add("Root", "IISWebVirtualDir")

        siteVDir.Properties("AppIsolated")(0) = 2

        siteVDir.Properties("Path")(0) = pathToRoot

        siteVDir.Properties("AccessFlags")(0) = 513

        siteVDir.Properties("FrontPageWeb")(0) = 1

        siteVDir.Properties("AppRoot")(0) = "/LM/W3SVC/" + siteID.ToString() + "/Root"

        'siteVDir.Properties("AppFriendlyName")(0) = "Root"

        siteVDir.CommitChanges()

        site.CommitChanges() 

        siteVDir.Close()

        site.Close()

        ' Create temp virtual directory on Default Web Site

        Dim deRoot As New DirectoryEntry("IIS://localhost/W3SVC/1/Root")

        deRoot.RefreshCache() 

        Dim deNewVDir As DirectoryEntry = deRoot.Children.Add(webSiteName.Replace("."c, "-"c), "IIsWebVirtualDir")

        deNewVDir.Properties("Path")(0) = pathToRoot

        deNewVDir.Properties("AccessFlags")(0) = 513

        deNewVDir.Properties("FrontPageWeb")(0) = 1

        deNewVDir.CommitChanges()

        deRoot.CommitChanges()

        'Create a Application

        deNewVDir.Invoke("AppCreate", True) 

        'Save Changes

        deNewVDir.CommitChanges()

        deRoot.CommitChanges()

        deNewVDir.Close()

        deRoot.Close() 

        Return site

    End Function 

    Private Shared Sub CreatePhysicalDirectory(ByVal pathToRoot As String, ByVal webSiteName As String)

        If (Directory.Exists(pathToRoot)) Then

            Throw New Exception("Error creating new website: Customer root directory already exists at " + pathToRoot)

        Else

            Directory.CreateDirectory(pathToRoot)

            Dim indexFile As New StreamWriter(pathToRoot + "/index.htm", False, System.Text.Encoding.ASCII)

            indexFile.Write("



Welcome to  "

+ webSiteName + "")

            indexFile.Close()

        End If

    End Sub 

End Class

Public Class WebSite

    Public Sub New(ByVal ObjDirectoryEntry As DirectoryEntry)

        site = ObjDirectoryEntry

        logFileFlags = New LogExtFileFlags(ObjDirectoryEntry)

    End Sub 

    Private site As DirectoryEntry

    Private logFileFlags As LogExtFileFlags

    Public ReadOnly Property LogFlags() As LogExtFileFlags

        Get

            Return logFileFlags

        End Get

    End Property 

    Public Property ServerComment() As String

        Get

            Return CType(site.Properties("ServerComment")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "ServerComment", Value)

        End Set

    End Property

    Public Property KeyType() As String

        Get

            Return CType(site.Properties("KeyType")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "KeyType", Value)

        End Set

    End Property 

    Public Property ServerBindings() As String

        Get

            Return CType(site.Properties("ServerBindings")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "ServerBindings", Value)

        End Set

    End Property

    Public Property DefaultDoc() As String

        Get

            Return CType(site.Properties("DefaultDoc")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "DefaultDoc", Value)

        End Set

    End Property 

    Public Property MaxBandwidth() As String

        Get

            Return CType(site.Properties("MaxBandwidth")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "MaxBandwidth", Value)

        End Set

    End Property

    Public Property ServerState() As Int32

        Get

            Return CType(site.Properties("ServerState")(0), Int32)

        End Get

        Set(ByVal Value As Int32)

            site.Invoke("Put", "ServerState", Value)

        End Set

    End Property 

    Public Property FrontPageWeb() As Int32

        Get

            Return CType(site.Properties("FrontPageWeb")(0), Int32)

        End Get

        Set(ByVal Value As Int32)

            site.Invoke("Put", "FrontPageWeb", Value)

        End Set

    End Property

    Public Property SecureBindings() As String

        Get

            Return CType(site.Properties("SecureBindings")(0), String)

        End Get

        Set(ByVal Value As String)

            site.Invoke("Put", "SecureBindings", Value)

        End Set

    End Property 

    Public Property ServerAutoStart() As Int32

        Get

            Return CType(site.Properties("ServerAutoStart")(0), Int32)

        End Get

        Set(ByVal Value As Int32)

            site.Invoke("Put", "ServerAutoStart", Value)

        End Set

    End Property

    Public Property ServerSize() As Int32

        Get

            Return CType(site.Properties("ServerSize")(0), Int32)

        End Get

        Set(ByVal Value As Int32)

            site.Invoke("Put", "ServerSize", Value)

        End Set

    End Property 

    Public ReadOnly Property Children() As DirectoryEntries

        Get

            Return site.Children

        End Get

    End Property

    Public ReadOnly Property Name() As String

        Get

            Return site.Name

        End Get

    End Property 

    Public Sub CommitChanges()

        site.CommitChanges()

    End Sub

    Public Sub SetInfo()

        site.Invoke("SetInfo")

    End Sub 

    Public Sub Close()

        site.Close()

    End Sub 

End Class

Public Class LogExtFileFlags

    Public Sub New(ByVal ObjDirectoryEntry As DirectoryEntry)

        site = ObjDirectoryEntry

    End Sub 

    Private site As DirectoryEntry

    Public Property LogExtFileFlags() As Int32

        Get

            Return CType(site.Properties("LogExtFileFlags")(0), Int32)

        End Get

        Set(ByVal Value As Int32)

            site.Invoke("Put", "LogExtFileFlags", Value)

        End Set

    End Property 

    'Public Property LogExtFileBytesRecv() As Boolean

    '    Get

    '        Return CBool(site.Properties("LogExtFileBytesRecv")(0))

    '    End Get

    '    Set(ByVal Value As Boolean)

    '        Dim showInLog As Int32 = 0

    '        If Value Then

    '            showInLog = 1

    '        End If

    '        site.Invoke("Put", "LogExtFileBytesRecv", showInLog)

    '    End Set

    'End Property

 End Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值