.net程序建立并设置IIS站点或虚拟目录

本文介绍了一种使用C#实现的IIS网站自动部署方法,包括创建新的网站、设置网站属性等步骤。通过示例代码展示了如何利用WMI进行网站配置。

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

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;

public partial class _Default : System.Web.UI.Page 

{

    private System.Data.SqlClient.SqlConnection sqlConn;

    private System.Data.SqlClient.SqlCommand Command;

    private string DBName;

    private string ServerName;

    private string AdminName;

    private string AdminPwd;



    private string iis;

    private string port;

    private string dir;

    public static string VirDirSchemaName = "IIsWebVirtualDir";



    private string _target;

    private DirectoryEntry _iisServer;

    private ManagementScope _scope;

    private ConnectionOptions _connection;





    protected void Page_Load(object sender, EventArgs e)

    {



    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        port = "9000";

        iis = "localhost";



        // 添加网站

        Connect();



        // 下面的信息为测试,可以自己编写文本框来接收用户输入信息

        string serverID = "1980";

        string serverComment = "loncomip";

        string defaultVrootPath = @"c:/asp";

        if (defaultVrootPath.EndsWith(@"/"))

        {

            defaultVrootPath = defaultVrootPath.Substring(0, defaultVrootPath.Length - 1);

        }

        

        string HostName = "";

        string IP = "";

        string Port = port;

        string sReturn = CreateWebSite(serverID, serverComment, defaultVrootPath, HostName, IP, Port);



        //设置网站属性

        SetWebsite(serverComment);

    }



    #region CreateWebsite 添加网站

    public string CreateWebSite(string serverID, string serverComment, string defaultVrootPath, string HostName, string IP, string Port)

    {

        try

        {

            ManagementObject oW3SVC = new ManagementObject(_scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);



            if (IsWebSiteExists(serverID))

            {

                return "网站已存在.";

            }



            ManagementBaseObject inputParameters = oW3SVC.GetMethodParameters("CreateNewSite");

            ManagementBaseObject[] serverBinding = new ManagementBaseObject[1];

            serverBinding[0] = CreateServerBinding(HostName, IP, Port);

            inputParameters["ServerComment"] = serverComment;

            inputParameters["ServerBindings"] = serverBinding;

            inputParameters["PathOfRootVirtualDir"] = defaultVrootPath;

            inputParameters["ServerId"] = serverID;





            ManagementBaseObject outParameter = null;

            outParameter = oW3SVC.InvokeMethod("CreateNewSite", inputParameters, null);



            // 启动网站

            string serverName = "W3SVC/" + serverID;

            ManagementObject webSite = new ManagementObject(_scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);

            webSite.InvokeMethod("Start", null);



            return (string)outParameter.Properties["ReturnValue"].Value;

        }

        catch (Exception ex)

        {

            return ex.Message;

        }

    }



    public ManagementObject CreateServerBinding(string HostName, string IP, string Port)

    {

        try

        {

            ManagementClass classBinding = new ManagementClass(_scope, new ManagementPath("ServerBinding"), null);

            ManagementObject serverBinding = classBinding.CreateInstance();

            serverBinding.Properties["Hostname"].Value = HostName;

            serverBinding.Properties["IP"].Value = IP;

            serverBinding.Properties["Port"].Value = Port;          



            serverBinding.Put();

            return serverBinding;

        }

        catch(Exception ex)

        {

            //return null;

            throw new Exception(ex.Message);

        }

    }



    /// <summary>

    /// 设置网站相关信息

    /// </summary>

    private void SetWebsite(string serverComment)

    {

        //获取刚建立WEB站点

        DirectoryEntry folderRootA = GetIISWebserver(serverComment);

        //返回根虚拟目录,为了设置网站的相关属性

        DirectoryEntry folderRoot = new DirectoryEntry(folderRootA.Path + "/Root");



       folderRoot.Properties["AccessRead"][0] = true;//允许读的权限

        folderRoot.Properties["AccessWrite"][0] = true;//允许写的权限

        folderRoot.Properties["AccessScript"][0] = true;//脚本可执行

        folderRoot.Properties["AccessSource"][0] = true;//不允许读取源程序

        folderRoot.Properties["AccessExecute"][0] = false;//允许执行的权限

        folderRoot.Properties["AuthAnonymous"][0] = true;//允许匿名访问

        folderRoot.Properties["AuthNTLM"][0] = true;//允许windows集成验证

        folderRoot.Properties["ContentIndexed"][0] = true;//索引此资源

        folderRoot.Properties["DefaultDoc"][0] = "login.aspx";//默认文档

        folderRoot.Properties["EnableDefaultDoc"][0] = true;//设置默认文档

        folderRoot.Properties["AspEnableParentPaths"][0] = true;//允许父路径

        folderRoot.Properties["AppIsolated"][0] = 2;//应用程序保护 

        folderRoot.Properties["AppFriendlyName"][0] = serverComment;

       
        folderRoot.CommitChanges();

    }

    #endregion



    #region Connect 连接IIS服务器

    public bool Connect()

    {



        if (iis == null)

            return false;

        try

        {

            _iisServer = new DirectoryEntry("IIS://" + iis + "/W3SVC/1");

            _target = iis;

            _connection = new ConnectionOptions();

            _scope = new ManagementScope(@"//" + iis + @"/root/MicrosoftIISV2", _connection);

            _scope.Connect();

        }

        catch

        {



            return false;

        }

        return IsConnected();

    }



    public bool IsConnected()

    {

        if (_target == null || _connection == null || _scope == null) return false;

        return _scope.IsConnected;

    }

    #endregion



    #region IsWebSiteExists 判断网站是否已经存在

    public bool IsWebSiteExists(string serverID)

    {

        try

        {

            string siteName = "W3SVC/" + serverID;

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(_scope, new ObjectQuery("SELECT * FROM IIsWebServer"), null);



            ManagementObjectCollection webSites = searcher.Get();

            foreach (ManagementObject webSite in webSites)

            {

                if ((string)webSite.Properties["Name"].Value == siteName)

                    return true;

            }



            return false;

        }

        catch

        {

            return false;

        }

    }

    #endregion



    #region GetNextOpenID 获得一个新的ServerID

    private int GetNextOpenID()

    {

        DirectoryEntry iisComputer = new DirectoryEntry("IIS://localhost/w3svc");

        int nextID = 0;

        foreach (DirectoryEntry iisWebServer in iisComputer.Children)

        {

            string sname = iisWebServer.Name;

            try

            {

                int name = int.Parse(sname);

                if (name > nextID)

                {

                    nextID = name;

                }

            }

            catch

            {

            }

        }

        return ++nextID;

    }

    #endregion



    /**/

    /// <summary>

    /// 返回指定的IISWebServer

    /// </summary>

    /// <param name="ServerComment"></param>

    /// <returns></returns>

    private DirectoryEntry GetIISWebserver(string ServerComment)

    {

        ServerComment = ServerComment.Trim();

        DirectoryEntry Service = new DirectoryEntry("IIS://" + iis + "/W3SVC");

        DirectoryEntry Server = null;

        IEnumerator ie = Service.Children.GetEnumerator();



        string comment;

        while (ie.MoveNext())

        {

            Server = (DirectoryEntry)ie.Current;

            if (Server.SchemaClassName == "IIsWebServer")

            {

                comment = Server.Properties["ServerComment"][0].ToString().ToLower().Trim();

                if (comment == ServerComment.ToLower())

                {

                    return Server;

                }

            }

        }



        return null;

    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值