当前位置:  编程技术>.net/c#/asp.net

C#操作IIS程序池及站点的创建配置实现代码

    来源: 互联网  发布时间:2014-10-18

    本文导语:  首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7; using System.DirectoryServices;using Microsoft.Web.Administration; 1:首先是对本版IIS的版本进行配置: 代码如下:DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");  ...

首先要对Microsoft.Web.Administration进行引用,它主要是用来操作IIS7;

using System.DirectoryServices;
using Microsoft.Web.Administration;

1:首先是对本版IIS的版本进行配置:

代码如下:

DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");
            string Version = getEntity.Properties["MajorIISVersionNumber"].Value.ToString();
            MessageBox.Show("IIS版本为:" + Version);

2:是判断程序池是存在;

代码如下:

///
        /// 判断程序池是否存在
        ///
        /// 程序池名称
        /// true存在 false不存在
        private bool IsAppPoolName(string AppPoolName)
        {
            bool result = false;
            DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
            foreach (DirectoryEntry getdir in appPools.Children)
            {
                if (getdir.Name.Equals(AppPoolName))
                {
                    result = true;
                }
            }
            return result;
        }

3:删除应用程序池

代码如下:

///
        /// 删除指定程序池
        ///
        /// 程序池名称
        /// true删除成功 false删除失败
        private bool DeleteAppPool(string AppPoolName)
        {
            bool result = false;
            DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
            foreach (DirectoryEntry getdir in appPools.Children)
            {
                if (getdir.Name.Equals(AppPoolName))
                {
                    try
                    {
                        getdir.DeleteTree();
                        result = true;
                    }
                    catch
                    {
                        result = false;
                    }
                }
            }
            return result;
        }

4:创建应用程序池 (对程序池的设置主要是针对IIS7;IIS7应用程序池托管模式主要包括集成跟经典模式,并进行NET版本的设置)

代码如下:

string AppPoolName = "LamAppPool";
            if (!IsAppPoolName(AppPoolName))
            {
                DirectoryEntry newpool;
                DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
                newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");
                newpool.CommitChanges();
                MessageBox.Show(AppPoolName + "程序池增加成功");
            }
            #endregion

            #region 修改应用程序的配置(包含托管模式及其NET运行版本)
            ServerManager sm = new ServerManager();
            sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0";
            sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典
            sm.CommitChanges();
            MessageBox.Show(AppPoolName + "程序池托管管道模式:" + sm.ApplicationPools[AppPoolName].ManagedPipelineMode.ToString() + "运行的NET版本为:" + sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion);

运用C#代码来对IIS7程序池托管管道模式及版本进行修改;



5:针对IIS6的NET版进行设置;因为此处我是用到NET4.0所以V4.0.30319 若是NET2.0则在这进行修改 v2.0.50727

代码如下:

//启动aspnet_regiis.exe程序
            string fileName = Environment.GetEnvironmentVariable("windir") + @"Microsoft.NETFrameworkv4.0.30319aspnet_regiis.exe";
            ProcessStartInfo startInfo = new ProcessStartInfo(fileName);
            //处理目录路径
            string path = vdEntry.Path.ToUpper();
            int index = path.IndexOf("W3SVC");
            path = path.Remove(0, index);
            //启动ASPnet_iis.exe程序,刷新脚本映射
            startInfo.Arguments = "-s " + path;
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;
            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
            process.WaitForExit();
            string errors = process.StandardError.ReadToEnd();

6:平常我们可能还得对IIS中的MIME类型进行增加;下面主要是我们用到两个类型分别是:xaml,xap

代码如下:

IISOle.MimeMapClass NewMime = new IISOle.MimeMapClass();
            NewMime.Extension = ".xaml"; NewMime.MimeType = "application/xaml+xml";
            IISOle.MimeMapClass TwoMime = new IISOle.MimeMapClass();
            TwoMime.Extension = ".xap"; TwoMime.MimeType = "application/x-silverlight-app";
            rootEntry.Properties["MimeMap"].Add(NewMime);
            rootEntry.Properties["MimeMap"].Add(TwoMime);
            rootEntry.CommitChanges();

7:下面是做安装时一段对IIS进行操作的代码;兼容IIS6及IIS7;新建虚拟目录并对相应的属性进行设置;对IIS7还进行新建程序池的程序;并设置程序池的配置;

代码如下:

///
    /// 创建网站
    ///
    ///
      public  void CreateNewWebSite(NewWebSiteInfo siteInfo)
        {
            if (!EnsureNewSiteEnavaible(siteInfo.BindString))
            {
                throw new Exception("该网站已存在" + Environment.NewLine + siteInfo.BindString);
            }
            DirectoryEntry rootEntry = GetDirectoryEntry(entPath);

            newSiteNum = GetNewWebSiteID();
            DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer");
            newSiteEntry.CommitChanges();

            newSiteEntry.Properties["ServerBindings"].Value = siteInfo.BindString;
            newSiteEntry.Properties["ServerComment"].Value = siteInfo.CommentOfWebSite;
            newSiteEntry.CommitChanges();
            DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");
            vdEntry.CommitChanges();
            string ChangWebPath = siteInfo.WebPath.Trim().Remove(siteInfo.WebPath.Trim().LastIndexOf('\'),1);
            vdEntry.Properties["Path"].Value = ChangWebPath;


            vdEntry.Invoke("AppCreate", true);//创建应用程序

            vdEntry.Properties["AccessRead"][0] = true; //设置读取权限
            vdEntry.Properties["AccessWrite"][0] = true;
            vdEntry.Properties["AccessScript"][0] = true;//执行权限
            vdEntry.Properties["AccessExecute"][0] = false;
            vdEntry.Properties["DefaultDoc"][0] = "Login.aspx";//设置默认文档
            vdEntry.Properties["AppFriendlyName"][0] = "LabManager"; //应用程序名称          
            vdEntry.Properties["AuthFlags"][0] = 1;//0表示不允许匿名访问,1表示就可以3为基本身份验证,7为windows继承身份验证
            vdEntry.CommitChanges();

            //操作增加MIME
            //IISOle.MimeMapClass NewMime = new IISOle.MimeMapClass();
            //NewMime.Extension = ".xaml"; NewMime.MimeType = "application/xaml+xml";
            //IISOle.MimeMapClass TwoMime = new IISOle.MimeMapClass();
            //TwoMime.Extension = ".xap"; TwoMime.MimeType = "application/x-silverlight-app";
            //rootEntry.Properties["MimeMap"].Add(NewMime);
            //rootEntry.Properties["MimeMap"].Add(TwoMime);
            //rootEntry.CommitChanges();

            #region 针对IIS7
            DirectoryEntry getEntity = new DirectoryEntry("IIS://localhost/W3SVC/INFO");
            int Version =int.Parse(getEntity.Properties["MajorIISVersionNumber"].Value.ToString());
            if (Version > 6)
            {
                #region 创建应用程序池
                string AppPoolName = "LabManager";
                if (!IsAppPoolName(AppPoolName))
                {
                    DirectoryEntry newpool;
                    DirectoryEntry appPools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
                    newpool = appPools.Children.Add(AppPoolName, "IIsApplicationPool");
                    newpool.CommitChanges();
                }
                #endregion

                #region 修改应用程序的配置(包含托管模式及其NET运行版本)
                ServerManager sm = new ServerManager();
                sm.ApplicationPools[AppPoolName].ManagedRuntimeVersion = "v4.0";
                sm.ApplicationPools[AppPoolName].ManagedPipelineMode = ManagedPipelineMode.Classic; //托管模式Integrated为集成 Classic为经典
                sm.CommitChanges();
                #endregion

                vdEntry.Properties["AppPoolId"].Value = AppPoolName;
                vdEntry.CommitChanges();
            }
            #endregion


            //启动aspnet_regiis.exe程序
            string fileName = Environment.GetEnvironmentVariable("windir") + @"Microsoft.NETFrameworkv4.0.30319aspnet_regiis.exe";
            ProcessStartInfo startInfo = new ProcessStartInfo(fileName);
            //处理目录路径
            string path = vdEntry.Path.ToUpper();
            int index = path.IndexOf("W3SVC");
            path = path.Remove(0, index);
            //启动ASPnet_iis.exe程序,刷新脚本映射
            startInfo.Arguments = "-s " + path;
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.UseShellExecute = false;
            startInfo.CreateNoWindow = true;
            startInfo.RedirectStandardOutput = true;
            startInfo.RedirectStandardError = true;
            Process process = new Process();
            process.StartInfo = startInfo;
            process.Start();
            process.WaitForExit();
            string errors = process.StandardError.ReadToEnd();
            if (errors != string.Empty)
            {
                throw new Exception(errors);
            }

        }

代码如下:

string entPath = String.Format("IIS://{0}/w3svc", "localhost");

public  DirectoryEntry GetDirectoryEntry(string entPath)
       {
           DirectoryEntry ent = new DirectoryEntry(entPath);
           return ent;
       }

        public class NewWebSiteInfo
        {
            private string hostIP;   // 主机IP
            private string portNum;   // 网站端口号
            private string descOfWebSite; // 网站表示。一般为网站的网站名。例如"www.dns.com.cn"
            private string commentOfWebSite;// 网站注释。一般也为网站的网站名。
            private string webPath;   // 网站的主目录。例如"e: mp"

            public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)
            {
                this.hostIP = hostIP;
                this.portNum = portNum;
                this.descOfWebSite = descOfWebSite;
                this.commentOfWebSite = commentOfWebSite;
                this.webPath = webPath;
            }

            public string BindString
            {
                get
                {
                    return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite); //网站标识(IP,端口,主机头值)
                }
            }

            public string PortNum
            {
                get
                {
                    return portNum;
                }
            }

            public string CommentOfWebSite
            {
                get
                {
                    return commentOfWebSite;
                }
            }

            public string WebPath
            {
                get
                {
                    return webPath;
                }
            }
        }

8:下面的代码是对文件夹权限进行设置,下面代码是创建Everyone 并给予全部权限

代码如下:

///
        /// 设置文件夹权限 处理给EVERONE赋予所有权限
        ///
        /// 文件夹路径
        public void SetFileRole()
        {
            string FileAdd = this.Context.Parameters["installdir"].ToString();
            FileAdd = FileAdd.Remove(FileAdd.LastIndexOf('\'), 1);
            DirectorySecurity fSec = new DirectorySecurity();
            fSec.AddAccessRule(new FileSystemAccessRule("Everyone",FileSystemRights.FullControl,InheritanceFlags.ContainerInherit|InheritanceFlags.ObjectInherit,PropagationFlags.None,AccessControlType.Allow));
            System.IO.Directory.SetAccessControl(FileAdd, fSec);
        }

    
 
 

您可能感兴趣的文章:

  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • c#的时间日期操作示例分享(c#获取当前日期)
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • C#操作txt文件,进行清空添加操作的小例子
  • C#实现装箱与拆箱操作简单实例
  • 浅谈C#互操作的内存溢出问题
  • C# 中的??操作符浅谈
  • c#剪切板操作的简单实例
  • c# 调用Surfer软件,添加引用的具体操作方法
  • c#异步task示例分享(异步操作)
  • c#下注册表操作的一个小细节
  • C#操作CLOB大对象的代码一例
  • c#判断操作系统位数实例代码
  • 一些关于c#与Sql的时间的操作
  • c#判断操作系统位数的示例分享
  • C#中的位操作小结
  • C# 操作符之三元操作符浅析
  • C# Dictionary操作范例(入门新手参考)
  • C#的WebBrowser操作frame实例解析
  • C# Winform 操作 INI 配置文件的实现代码
  • C#程序最小化到托盘图标操作步骤与实现代码
  • Xcode介绍及创建工程和工程依赖操作步骤
  • 如何创建日志文件?并且纪录对数据库的操作???
  • 最近在看《自己动手写操作系统》,有同路者,大家结伴前行吧。请谁创建一个QQ群吧,100分奖励
  • 执行一个main函数程序时,unix操作系统调用什么创建进程?fork?newproc?
  • .sh文件创建一个快捷方式放到开始菜单里 ubuntu操作系统
  • 比较详细的完美解决安装sql2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作。 原创
  • c# 文件夹操作(创建或删除)的实现代码
  • MySQL学习笔记2:数据库的基本操作(创建删除查看)
  • 完美解决MSSQL"以前的某个程序安装已在安装计算机上创建挂起的文件操作"
  • 求救:AIX 4.3上用pthread_create创建线程时居然随机地非法操作?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • CentOS yum 源设置为163的源操作步骤及配置文件参考
  • windows操作系统做服务器,客户端是unix操作系统,如何配置unix才能上网
  • red hat 9.0 操作系统上如何配置运行DNS Server
  • 有没有操作unix风格配置文件的函数库?
  • INI配置文件操作库 SimpleIni
  • java中有对配置文件*.ini的操作吗?
  • linux用c操作配置文件
  • 请问: 安装Linux操作系统,硬件配置最低要求是什么?
  • 什么书介绍Linux系统配置操作 ----阿菜
  • 如何在JB7中实现EJB helloworld! 配置和操作在线等!急!
  • 一些关于c#与Sql的时间的操作 iis7站长之家
  • JDK环境变量配置的具体操作步骤
  • C# Winform 调用系统接口操作 INI 配置文件的代码
  • linux下配置samba,共享根目录怎么会木有操作权限
  • 高分求助 。。。。。。。。。。。。各位高手。可以不可以告诉我。当我下载完resin之后应该如何配置好一个jsp的环境。我的操作系统是win2k professional
  • 用samba实现windows 与 linux 文件共享,我没有在shell下操作,图形界面下怎么配置
  • 各位,我现在的操作系统是win2k professional 我现在想运行.jsp程序。我应该有什么样的准备。用什么工具做jsp.服务器怎么配置。这些东西都那里去下载。请指点。不胜感激!
  • C#读写xml配置文件(LINQ操作实例)
  • CentOS操作系统,rsh远程无密码登录配置
  • python连接mongodb操作数据示例(mongodb数据库配置类)
  • 配置MySQL与卸载MySQL实例操作
  • C++ Stacks(堆栈) 成员 操作:比较和分配堆栈
  • 谁有操作系统PV操作的例子???谁有操作系统PV操作的例子???谢谢!!
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • C++ I/O 成员 flags():操作flags
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • C++ I/O 成员 width():操作域宽度
  • 什么样的操作最耗费服务器的IO操作?
  • MyEclipse如何查看和设置文件编码格式相关操作
  • 无操作系统下对U盘的操作


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3