准备工作:

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

DirectoryEntry vDir = iisAdmin.Children.Add(vDirName, "IIsWebVirtualDir");

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

  1. saltstack 发布 iis 站点

    Saltstack 发布 iis 站点 saltstack 主服务器配置:切换到 salt 的主目录下 : 主目录示例:/home/salt 程序集放置目录: web/web1 sls 目录: web ...

  2. 通过代码动态创建IIS站点

    对WebApi进行单元测试时,一般需要一个IIS站点,一般的做法,是通过写一个批处理的bat脚本来实现,其实通过编码,也能实现该功能. 主要有关注三点:应用程序池.Web站点.绑定(协议类型:http ...

  3. .net 程序 动态 控制IIS 站点域名绑定

    第一步:引用 导入 System.EnterpriseServices及System.DirectoryServices 两个引用 程序引用: using System.DirectoryServic ...

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

    经过研究,终于使用批处理解决了站点发布步骤多的问题. 完整批处理如下: @set "sitePath=%~dp0" @echo 新建程序池 @C:\Windows\System32 ...

  5. 今天在发布IIS站点的时候遇到了一些问题

    1.HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 分析:一般5XX的错误都是服务器的问题,这里把应用程序池 ...

  6. 自动发布-asp.net自动发布、IIS站点自动发布(集成SLB、配置管理、Jenkins)

    PS:概要.背景.结语都是日常“装X”,可以跳过直接看自动发布 环境:阿里云SLB.阿里云ECS.IIS7.0.Jenkins.Spring.Net 概要 公司一个项目从无到有,不仅仅是系统从无到有的 ...

  7. [译]MVC网站教程(三):动态布局和站点管理

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.   自定义操作结果和控制器扩展 1)   OpenFileResult 2)   ImageR ...

  8. Qt 官方一键动态发布技能

    苦找了好几天动态库,程序可以运行了,结果没有图标还是少了运行库很苦恼,发现Qt 官方有一键动态发布功能感觉自己萌萌的,来自qt吧亲测可用. 集成开发环境 QtCreator 目前生成图形界面程序 ex ...

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

    jeecg 3.7.1  集群定时任务动态发布模块 使用规则   新版特性:    支持集群定时任务,支持分布式. 菜单路径: 系统监控-->定时任务 字段说明: 任务ID.任务说明:自定义即可 ...

随机推荐

  1. sql server 交集,差集的用法 (集合运算)

    概述 为什么使用集合运算: 在集合运算中比联接查询和EXISTS/NOT EXISTS更方便. 并集运算(UNION) 并集:两个集合的并集是一个包含集合A和B中所有元素的集合. 在T-SQL中.UN ...

  2. AcWing P379 捉迷藏 题解

    Analysis 这道题因为我们要给能到达的两个点都连上,又由于n<=200,所以我们可以用n³的传递闭包来建边,再用匈牙利算法来求二分图最大点独立集. #include<iostream ...

  3. webservice企业开发实例

    1. 2. 3.环境变量的配置 4.创建动态web工程-->版本2.5-->tomcat7.0 第一步:创建cxf项目 第二步:添加cxf的jar包 全部将jar包拷入lib目录下 第三步 ...

  4. CF359D Pair of Numbers gcd+暴力

    利用区间 gcd 个数不超过 log 种来做就可以了~ code: #include <bits/stdc++.h> #define N 300005 #define setIO(s) f ...

  5. learning scala How To Create Implicit Function

    println("Step 1: How to create a wrapper String class which will extend the String type") ...

  6. 关于item的prevvalue

    一个数据库大小监控项的更新周期是86400.一天,使用的最新值减去上次数值来显示变化值,一直就是10g-0 变化值为10g. 在更新时间为一天的时候prevvalue是0,不能显示上次的数值 当吧更新 ...

  7. maven 聚合工程 > 坑总结

    maven聚合工程子项目无法构建:父工程未 install tomcat可以运行,maven 无法编译报错,检查是否添加红色语句: <dependency> <groupId> ...

  8. [提权]CVE-2018-8120漏洞复现

    0x01 漏洞名称 Windows操作系统Win32k的内核提权漏洞 0x02 漏洞编号 CVE-2018-8120 0x03 漏洞描述 部分版本Windows系统win32k.sys组件的NtUse ...

  9. vue-cli构建路径加载资源出错问题

    这份文档是对应 @vue/cli 3.x 版本的,官方文档https://cli.vuejs.org/zh/guide/ 项目打包执行npm run build的时候,打开dist目录的index.h ...

  10. 使用HttpClient调用WebAPI接口,含WebAPI端示例

    API端: using log4net; using System; using System.Collections.Generic; using System.IO; using System.L ...