孟宪会ID:net_lover
909578次访问,排名32好友199人,关注者0
http://dotnet.aspx.cc/
【声明:各位好,由于系统“添加好友”功能只能添加200个,后来的朋友不能加入,见谅!!!】
net_lover的文章
原创 246 篇
翻译 2 篇
转载 5 篇
评论 850 篇
孟宪会的公告
欢迎光临!您在阅读的过程中有任何建议或者意见,请发邮件或者留言,合作愉快!
最近评论
Bluesky_Leon:公司内,不知道为什么无法安装
starfork:在高级选项里面,点击更改代理设置,会切换到IE的Connection选项卡上
这算什么?不能自己设置代理,还要看IE的设置
ipnuftj:消化中
blueskit:已经装上!
hxmhj:不好.
文章分类
收藏
    相册
    文章用图
    【孟子E章】站点
    【孟子E章】站点(RSS)
    【孟子E章】网摘(RSS)
    【孟子E章】网站(RSS)
    Silverlight 1.0 SDK 中文版
    Silverlight 1.0 SDK 中文版
    【网上邻居】
    .Net开发资源中心
    【兔子】专栏
    AppleVB 主页
    Estyle(靳田)之狂想手扎
    huahaoyueyuan
    JavaProgramers的专栏
    意玺的BLOG
    最爱白菜
    枕善居VB.NET源码博客
    美丽眼睛看世界
    阿赖
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(一)收藏

    新一篇: 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(二) | 旧一篇: 如何得到 .NET Framework 安装的文件夹?

    IIS 6.0以后使用MetaBase.xml存储IIS信息,因此,可以直接修改这个文件即可。

    代码如下: 很显然,这种方法比较复杂,不直观,而且需要停止IIS,影响现有网站。

     

    /// <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(
    "恭喜你,全部工作完成!");
    }

    发表于 @ 2007年08月26日 22:22:00|评论(loading...)|编辑

    新一篇: 利用C#创建 IIS 站点并设置.NET Framework版本为ASP.NET 2.0 的方法(二) | 旧一篇: 如何得到 .NET Framework 安装的文件夹?

    评论

    #aws2003 发表于2007-09-24 10:53:30  IP: 59.40.225.*
    谢了,正需要这些东东!
    #ysd254 发表于2007-10-09 09:12:12  IP: 58.60.178.*
    太牛了!!
    #xiaoban04 发表于2008-05-12 18:27:48  IP: 60.1.237.*
    不错,学习当中
    #cyco008 发表于2008-05-30 21:43:31  IP: 219.136.229.*
    Good,太强了
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 孟宪会