C#实现动态发布IIS站点帮助类

准备工作:

1、引用 System.DirectoryServices 系统程序集

2、引用 Microsoft.Web.Administration 程序集,类库位置在 C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll ,直接拷贝到项目引用即可

3、调用方式:

string bing = string.Format("{0}:{1}:{2}", item.BingIp, item.Port, item.BingAddr);
 bool result = IISManager.CreateWebSite(item.SiteName, filePath, bing);

4、源码:

public class IISManager
    {
        /// <summary>
        /// 创建一个站点
        /// </summary>
        /// <param name="name">站点名称</param>
        /// <param name="physicalPath">项目所在路径</param>
        /// <param name="bindingInformation">绑定信息</param>
        /// <param name="bindingProtocol">类型,默认http</param>
        /// <returns></returns>
        public static bool CreateWebSite(string name, string physicalPath, string bindingInformation = "*:80:", string bindingProtocol = "http")
        {
            try
            {
                ServerManager manager = new ServerManager();
                //判断应用程序池是否存在
                if (manager.ApplicationPools[name] != null)
                {
                    manager.ApplicationPools.Remove(manager.ApplicationPools[name]);
                }

                //判断web应用程序是否存在
                if (manager.Sites[name] != null)
                {
                    manager.Sites.Remove(manager.Sites[name]);
                }

                manager.Sites.Add(name, bindingProtocol, bindingInformation, physicalPath);

                //添加web应用程序池
                ApplicationPool pool = manager.ApplicationPools.Add(name);

                //设置web应用程序池的Framework版本
                pool.ManagedRuntimeVersion = "v4.0";

                //设置是否启用32位应用程序
                pool.SetAttributeValue("enable32BitAppOnWin64", true);

                //设置web网站的应用程序池
                manager.Sites[name].Applications[0].ApplicationPoolName = name;

                manager.CommitChanges();

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        /// <summary>
        /// 创建一个站点
        /// </summary>
        /// <param name="name">站点名称</param>
        /// <param name="physicalPath">项目所在路径</param>
        /// <param name="port">端口号</param>
        /// <returns></returns>
        public static bool CreateWebSite(string name, string physicalPath, int port = 80)
        {
            try
            {
                ServerManager manager = new ServerManager();
                //判断应用程序池是否存在
                if (manager.ApplicationPools[name] != null)
                {
                    manager.ApplicationPools.Remove(manager.ApplicationPools[name]);
                }

                //判断web应用程序是否存在
                if (manager.Sites[name] != null)
                {
                    manager.Sites.Remove(manager.Sites[name]);
                }

                manager.Sites.Add(name, physicalPath, port);

                //添加web应用程序池
                ApplicationPool pool = manager.ApplicationPools.Add(name);

                //设置web应用程序池的Framework版本
                pool.ManagedRuntimeVersion = "v4.0";

                //设置是否启用32位应用程序
                pool.SetAttributeValue("enable32BitAppOnWin64", true);

                //设置web网站的应用程序池
                manager.Sites[name].Applications[0].ApplicationPoolName = name;

                manager.CommitChanges();

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        /// <summary>
        /// 创建虚拟目录
        /// </summary>
        /// <param name="vDirName">虚拟目录名称</param>
        /// <param name="path">实际路径</param>
        /// <param name="iAuth">设置目录的安全性 0-不允许匿名访问,1-为允许,2-基本身份验证,3-允许匿名+基本身份验证,4-整合Windows验证,5-允许匿名+整合Windows验证</param>
        /// <param name="serverName">默认localhost</param>
        /// <returns></returns>
        public static bool CreateVirtualDirectory(string vDirName, string path, int iAuth = 1, string serverName = "localhost")
        {
            try
            {
                // 确定IIS版本
                DirectoryEntry iisSchema = new DirectoryEntry("IIS://" + serverName + "/Schema/AppIsolated");
                bool iisUnderNt = iisSchema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN";
                iisSchema.Dispose();

                // 获得管理权限
                DirectoryEntry iisAdmin = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/Root");

                // 如果虚拟目录已经存在则删除
                foreach (DirectoryEntry v in iisAdmin.Children)
                {
                    if (v.Name == vDirName)
                    {
                        try
                        {
                            iisAdmin.Invoke("Delete", new object[] { v.SchemaClassName, vDirName });
                            iisAdmin.CommitChanges();
                        }
                        catch (Exception ex)
                        {
                            return false;
                        }
                    }
                }

                // 创建一个虚拟目录
                DirectoryEntry vDir = iisAdmin.Children.Add(vDirName, "DefaultWebSiteVirtualDir");

                // 创建一个web应用
                vDir.Invoke("AppCreate", !iisUnderNt);

                //应用程序名称
                vDir.Properties["AppFriendlyName"][0] = vDirName;
                //设置读取权限
                vDir.Properties["AccessRead"][0] = true;
                //值 true 表示不论文件类型是什么,文件或文件夹的内容都可以执行
                vDir.Properties["AccessExecute"][0] = false;
                //值 true 表示允许用户将文件及其相关属性上载到服务器上已启用的目录中,或者更改可写文件的内容。
                //只有使用支持 HTTP 1.1 协议标准的 PUT 功能的浏览器,才能执行写入操作
                vDir.Properties["AccessWrite"][0] = false;
                //值 true 表示如果是脚本文件或静态内容,则可以执行文件或文件夹的内容。值 false 只允许提供静态文件,如 HTML 文件
                vDir.Properties["AccessScript"][0] = true;
                //设置为 true 时,浏览目录时系统会加载该目录的默认文档(由 De, faultDoc 属性指定)
                vDir.Properties["EnableDefaultDoc"][0] = true;
                //设置为 true 时,将启用目录浏览
                vDir.Properties["EnableDirBrowsing"][0] = false;
                //包含一个或多个默认文档的文件名,如果在客户端的请求中不包含文件名,将把默认文档的文件名返回给客户端
                vDir.Properties["DefaultDoc"][0] = "login.html,index.html,default.html,Default.aspx,index.aspx";
                //项目路径
                vDir.Properties["Path"][0] = path;
                //作为有效方案返回给客户端的 Windows 验证方案的设置
                vDir.Properties["AuthFlags"][0] = iAuth;

                // NT格式不支持这特性
                if (!iisUnderNt)
                {
                    //页面是否允许当前目录的相对路径(使用 ..\ 表示法)
                    vDir.Properties["AspEnableParentPaths"][0] = true;
                }

                // 设置改变
                vDir.CommitChanges();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }

原文地址:https://www.cnblogs.com/dujian123/p/11508138.html

时间: 2024-10-25 23:04:17

C#实现动态发布IIS站点帮助类的相关文章

通过代码动态创建IIS站点

对WebApi进行单元测试时,一般需要一个IIS站点,一般的做法,是通过写一个批处理的bat脚本来实现,其实通过编码,也能实现该功能. 主要有关注三点:应用程序池.Web站点.绑定(协议类型:http.https,IP地址,端口,主机名) 1.总体代码 var webSite = app.WebSite; using (var sm = new ServerManager()) { //创建应用程序池 var appPool = sm.ApplicationPools.FirstOrDefaul

动态创建IIS站点

对WebApi进行单元测试时,一般需要一个IIS站点,一般的做法,是通过写一个批处理的bat脚本来实现,其实通过编码,也能实现该功能. 主要有关注三点:应用程序池.Web站点.绑定(协议类型:http.https,IP地址,端口,主机名) 1.总体代码 var webSite = app.WebSite; using (var sm = new ServerManager()) { //创建应用程序池 var appPool = sm.ApplicationPools.FirstOrDefaul

使用批处理自动发布IIS站点,基于IIS7及以上

昨晚经过一个多小时的研究,终于使用批处理解决了站点发布步骤多的问题. 完整批处理如下: @set "sitePath=%~dp0" @echo 新建程序池 @C:\Windows\System32\inetsrv\appcmd.exe add apppool /name:"新程序池" /managedRuntimeVersion:"v4.0" @C:\Windows\System32\inetsrv\appcmd.exe stop site &q

zabbix企业应用:利用自动发现监控IIS站点

如果一台windows server有许多个IIS站点,我们想实现这样一个监控目标:监控每个站点的状态.请求.流量.连接数,而且以后新增加的站点也可以自动加入到监控里,不需要再手动添加. 利用zabbix的自动发现(LLD)功能结合脚本可以实现上面的需求,实现对IIS站点的动态添加,动态监控. 先看一下监控的效果: 上图中的"Web Service(wskh)"是指IIS网站名称为wskh:"Web Service(_Total)"是指IIS下所有的站点. 网站流量

Android开发记录19-朋友圈动态发布时间计算

Android开发记录19-朋友圈动态发布时间计算 转载请注明:IT_xiao小巫,http://blog.csdn.net/wwj_748 如果觉得博文不错,请移步到2014年博客之星投票地址:http://vote.blog.csdn.net/blogstar2014/details?username=wwj_748#content 前面的一篇文章给大家关于时间知识点的分享http://blog.csdn.net/wwj_748/article/details/11536421,本篇博客笔者

jeecg 3.7.1 新版功能,集群定时任务动态发布模块 使用规则

jeecg 3.7.1  集群定时任务动态发布模块 使用规则 新版特性:    支持集群定时任务,支持分布式. 菜单路径: 系统监控-->定时任务 字段说明: 任务ID.任务说明:自定义即可 cron表达式: 定义任务触发的时间规则.提供一个在线生成cron的地址,http://cron.qqe2.com/ 任务类名: 执行定时任务的业务类,实现org.quartz.Job接口,任务触发时系统自动执行execute方法.格式:包名.类名,举例:com.mypackage.ClassName 执行

C#ASP.NET打包安装部署文件一键安装网站,包括IIS站点创建、数据库附加。

最近在开发web网站安装部署,以前从来没有做过web的安装打包没有头绪就开始上网查资料. 查了两天资料发现网上的资料要么不全要么就有错误,我就总结了网上的资料重新整理的一番,经过本人测试可用无错误 一下为借鉴部分资料的原文地址 此链接为打包ASP.NET网站资料(这个资料有问题,在自定义操作哪一步详情看下面文章):http://www.cnblogs.com/fish520/archive/2016/09/22/5882450.html 此链接为创建IIS站点(其中代码不全我还借鉴的部分其他论坛

xadmin站点管理类

9. Xadmin xadmin是Django的第三方扩展,比使用Django的admin站点更强大也更方便. 文档:https://xadmin.readthedocs.io/en/latest/index.html 9.1. 安装 通过如下命令安装xadmin的最新版 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 在配置文件中注册如下应用 INSTALLED_APPS = [   ...    'xadm

用powershell脚本实现zabbix LLD 监控IIS站点

需求: 生产环境中需要实现IIS 站点监控自动化,需要获取到站点名和站点进程的PID.有了站点名可以用windows内置的key获取相关监控项的值.例如站点的get.post请求数,站点的版本信息等.但是还需要监控IIS站点的SQL连接数,这需要IIS站点被访问,并且有SQL进程.然后通过进程号来判断是各个站点的SQL连接数. 脚本内容: get.sitename [email protected]() [System.Collections.ArrayList]$arraylist=$site