利用C#建立 IIS 網站並設定.NET Framework版本為ASP.NET 2.0 的方法

來源:互聯網
上載者:User

/// <summary>
/// 本方法建立一個網站(當然,建立虛擬目錄也完全沒有任何問題,做法類似),並設定IIS中ASP.NET版本為2.0
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
    //網站名稱和實體路徑
    String webSiteName = "mengxianhui";
    String pathToRoot = @"c:"mengxianhui";
    DirectoryEntry root = new DirectoryEntry("IIS://localhost/W3SVC");// Find unused ID value for new web site
    int siteID = 1;
    //得到現有的網站標識
    foreach (DirectoryEntry entry in root.Children)
    {
        if (entry.SchemaClassName == "IIsWebServer")
        {                   
            int ID = Convert.ToInt32(entry.Name);

            if (ID >= siteID)
            {
                siteID = ID + 1;
            }
       }
    }

    //利用設定檔的做法建立網站,需要先停止原來的服務,以便能夠順利寫入資料
    label1.Text = "正在停止服務……";
    Application.DoEvents();
    System.ServiceProcess.ServiceController mobServiceController3 = new System.ServiceProcess.ServiceController("IISAdmin");
    foreach (System.ServiceProcess.ServiceController dependentService in mobServiceController3.DependentServices)
    {
        switch (dependentService.Status)
        {
            case ServiceControllerStatus.Stopped:
                break;

            case ServiceControllerStatus.StopPending:
                dependentService.WaitForStatus(ServiceControllerStatus.Stopped);
                break;

            default:
                dependentService.Stop();
                dependentService.WaitForStatus(ServiceControllerStatus.Stopped);
                break;
        }

    }
    if (mobServiceController3.Status != ServiceControllerStatus.Stopped)
    {
        mobServiceController3.Stop();
        mobServiceController3.WaitForStatus(ServiceControllerStatus.Stopped);
    }
    //確保服務完全停止
    label1.Text = "停止服務完成!";
    Application.DoEvents();
    String ConfigPath = System.Environment.SystemDirectory + @""inetsrv"MetaBase.xml";
    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
    doc.Load(ConfigPath);

    System.Xml.XmlNamespaceManager xnm = new System.Xml.XmlNamespaceManager(doc.NameTable);
    xnm.AddNamespace("mxh", "urn:microsoft-catalog:XML_Metabase_V64_0");

    //得到最大的網站的標識,要在其後面加入節點
    string SiteLocation = "/LM/W3SVC/" + (siteID - 1);
    System.Xml.XmlNode LastWebServer = doc.SelectSingleNode("/mxh:configuration/mxh:MBProperty/mxh:IIsWebVirtualDir[@Location='" + SiteLocation + "/root']", xnm);
    if (LastWebServer == null)
    {
        MessageBox.Show("沒有現有的 Web 服務器。");
        doc = null;
        return;
    }

    //找到AdminACL設定,每次都是變化的 -_-!
    System.Xml.XmlNode LastWebServerFilter = doc.SelectSingleNode("/mxh:configuration/mxh:MBProperty/mxh:IIsFilters[@Location='" + SiteLocation + "/filters']/@AdminACL", xnm);
    if (LastWebServer == null)
    {
        MessageBox.Show("沒有現有的 Web 服務器 filters。");
        doc = null;
        return;
    }

    String LastWebServerFilterAdminAcl = LastWebServerFilter.Value;
   
    //建立新網站
    label1.Text = "建立新網站……";
    Application.DoEvents();
    String NewSiteID = "/LM/W3SVC/" + siteID.ToString();
    System.Xml.XmlNode NewWebServer = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsWebServer", "urn:microsoft-catalog:XML_Metabase_V64_0");
    System.Xml.XmlAttribute NewWebServerLocation = doc.CreateAttribute("Location");
    NewWebServerLocation.Value = NewSiteID;
    NewWebServer.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AuthFlags");
    NewWebServerLocation.Value = "0";
    NewWebServer.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("ServerAutoStart");
    NewWebServerLocation.Value = "TRUE";
    NewWebServer.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("ServerBindings");
    NewWebServerLocation.Value = ":802:";
    NewWebServer.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("ServerComment");
    NewWebServerLocation.Value = webSiteName;
    NewWebServer.Attributes.Append(NewWebServerLocation);
    LastWebServer.ParentNode.InsertAfter(NewWebServer, LastWebServer);

    System.Xml.XmlNode NewWebServerFilter = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsFilters", "urn:microsoft-catalog:XML_Metabase_V64_0");
    NewWebServerLocation = doc.CreateAttribute("Location");
    NewWebServerLocation.Value = NewSiteID + "/filters";
    NewWebServerFilter.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AdminACL");
    NewWebServerLocation.Value = LastWebServerFilterAdminAcl;
    NewWebServerFilter.Attributes.Append(NewWebServerLocation);

    NewWebServer.ParentNode.InsertAfter(NewWebServerFilter, NewWebServer);           

    System.Xml.XmlNode IIsWebVirtualDir = doc.CreateNode(System.Xml.XmlNodeType.Element, "", "IIsWebVirtualDir", "urn:microsoft-catalog:XML_Metabase_V64_0");
    NewWebServerLocation = doc.CreateAttribute("Location");
    NewWebServerLocation.Value = NewSiteID + "/root";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AccessFlags");
    NewWebServerLocation.Value = "AccessRead | AccessScript";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AppFriendlyName");
    NewWebServerLocation.Value = "預設應用程式";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AppIsolated");
    NewWebServerLocation.Value = "2";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AppRoot");
    NewWebServerLocation.Value = NewSiteID + "/Root";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("AuthFlags");
    NewWebServerLocation.Value = "AuthAnonymous | AuthNTLM";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    //關於許可權,可以任意組合
    NewWebServerLocation = doc.CreateAttribute("DirBrowseFlags");
    NewWebServerLocation.Value = "DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc";
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerLocation = doc.CreateAttribute("Path");
    NewWebServerLocation.Value = pathToRoot;
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    //為安全起見,下面的系統檔案夾需要使用程式的方法擷取,如System.Environment.SystemDirectory,和 System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
    //這裡為了簡單期間,直接寫入
    string ScriptMaps = @".asp,C:"WINDOWS"system32"inetsrv"asp.dll,5,GET,HEAD,POST,TRACE
                .cer,C:"WINDOWS"system32"inetsrv"asp.dll,5,GET,HEAD,POST,TRACE
                .cdx,C:"WINDOWS"system32"inetsrv"asp.dll,5,GET,HEAD,POST,TRACE
                .asa,C:"WINDOWS"system32"inetsrv"asp.dll,5,GET,HEAD,POST,TRACE
                .idc,C:"WINDOWS"system32"inetsrv"httpodbc.dll,5,GET,POST
                .shtm,C:"WINDOWS"system32"inetsrv"ssinc.dll,5,GET,POST
                .shtml,C:"WINDOWS"system32"inetsrv"ssinc.dll,5,GET,POST
                .stm,C:"WINDOWS"system32"inetsrv"ssinc.dll,5,GET,POST
                .asax,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .ascx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .ashx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .asmx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .aspx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .axd,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .vsdisco,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .rem,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .soap,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .config,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .cs,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .csproj,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .vb,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .vbproj,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .webinfo,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .licx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .resx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .resources,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .xoml,C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .rules,C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .master,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .skin,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .compiled,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .browser,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .mdb,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .jsl,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .vjsproj,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .sitemap,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .msgx,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .ad,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .dd,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .ldd,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .sd,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .cd,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .adprototype,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .lddprototype,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .sdm,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .sdmDocument,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .ldb,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .svc,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,1,GET,HEAD,POST,DEBUG
                .mdf,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .ldf,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .java,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .exclude,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG
                .refresh,c:"windows"microsoft.net"framework"v2.0.50727"aspnet_isapi.dll,5,GET,HEAD,POST,DEBUG";

    NewWebServerLocation = doc.CreateAttribute("ScriptMaps");
    NewWebServerLocation.Value = ScriptMaps;
    IIsWebVirtualDir.Attributes.Append(NewWebServerLocation);

    NewWebServerFilter.ParentNode.InsertAfter(IIsWebVirtualDir, NewWebServerFilter);
    doc.Save(ConfigPath);
    doc = null;

    label1.Text = "建立網站完成!";
    mobServiceController3 = null;
    mobServiceController3 = new System.ServiceProcess.ServiceController("w3svc");
    mobServiceController3.Start();
    mobServiceController3.WaitForStatus(ServiceControllerStatus.Running);
    mobServiceController3 = null;
    label1.Text = "恭喜你,全部工作完成!";
    MessageBox.Show("恭喜你,全部工作完成!");
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.