using System;
using System.DirectoryServices;
using System.Management;
using Microsoft.Web.Administration; namespace ConsoleApplication_IsNullTest
{
/// <summary>
/// IIS Helper.
/// </summary>
public class IISHelper
{ private static string siteName = "siteName";
private static string sitePath = "sitePath";
private static string serverId = "";
private static string runtimeVersion="v4.0"; public static string RuntimeVersion
{
get { return runtimeVersion; }
} public static DirectoryEntry iisSite = new DirectoryEntry("IIS://localhost/W3SVC", "UserName", "Userpwd"); private static ManagementScope scope = null; public IISHelper()
{
scope = new ManagementScope("ConfigManager.ManagementScopePath");
if (scope.IsConnected == false)
{
scope.Connect();
}
} /// <summary>
/// 创建应用程序池
/// </summary>
/// <param name="AppPoolName">程序池名</param>
/// <param name="PipelineModel">Managed pipeline model.</param>
public static void CreateAppPool(string AppPoolName, ManagedPipelineMode pipelineMode)
{
DirectoryEntry newpool;
DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool");
newpool.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
newpool.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
newpool.CommitChanges();
} /// <summary>
/// 创建site
/// </summary>
public static void CreateWebSite(Object site)
{
ManagementObject manage = new ManagementObject(scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);
ManagementBaseObject inputParameters = manage.GetMethodParameters("CreateNewSite");
ManagementBaseObject[] serverBinding = new ManagementBaseObject[];
serverBinding[] = CreateServerBinding("", "127.0.0.1", "");
inputParameters["ServerComment"] = siteName;
inputParameters["ServerBindings"] = serverBinding;
inputParameters["PathOfRootVirtualDir"] = sitePath;
inputParameters["ServerId"] = serverId;
try
{
manage.InvokeMethod("CreateNewSite", inputParameters, null);
}
catch
{
throw new Exception("createNewSite");
}
SetAppToPool(siteName, serverId); System.Threading.Thread.Sleep(); //启动web site
string serverName = "W3SVC/" + serverId;
ManagementObject manageSite = new ManagementObject(scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
manageSite.InvokeMethod("Start", null);
} /// <summary>
/// 关联应用程序池
/// </summary>
/// <param name="appPoolName"></param>
/// <param name="serverId"></param>
private static void SetAppToPool(string appPoolName, string serverId)
{
string path = string.Format("IIS://localhost/W3SVC/{0}/Root", serverId);
DirectoryEntry entry = new DirectoryEntry(path);
entry.Properties["AppPoolId"].Value = appPoolName;
entry.CommitChanges();
entry.Close();
} /// <summary>
/// Get site url前缀
/// </summary>
/// <param name="HostName"></param>
/// <param name="IP"></param>
/// <param name="Port"></param>
/// <returns></returns>
private static ManagementObject CreateServerBinding(string HostName, string IP, string Port)
{
try
{
ManagementClass classBinding = new ManagementClass(scope, new ManagementPath("ServerBinding"), null);
ManagementObject serverBinding = classBinding.CreateInstance();
serverBinding.Properties["Hostname"].Value = HostName;
serverBinding.Properties["IP"].Value = IP;
serverBinding.Properties["Port"].Value = Port;
serverBinding.Put();
return serverBinding;
}
catch
{
return null;
}
} /// <summary>
/// 创建web site 子项的site $ 应用程序池
/// </summary>
/// <param name="site"></param>
/// <param name="serviceName"></param>
/// <param name="AppolName"></param>
public static void CreateApplication(Object site, string serviceName, string AppolName)
{
DirectoryEntry defaultWebSite = GetWebisteDirectory("FUSiteName");//父级site name
if (defaultWebSite != null)
{
DirectoryEntry defaultWebSiteRoot = new DirectoryEntry(defaultWebSite.Path + "/Root"); //Create and setup new virtual directory
DirectoryEntry virtualDirectory = defaultWebSiteRoot.Children.Add(siteName, "IIsWebVirtualDir"); virtualDirectory.Properties["Path"][] = sitePath;
virtualDirectory.Properties["AppFriendlyName"][] = siteName;
virtualDirectory.CommitChanges(); virtualDirectory.Invoke("AppCreate", );
object[] param = { , siteName, true };
virtualDirectory.Invoke("AppCreate3", param);
virtualDirectory.Properties["AppPoolId"].Value = AppolName; string appPoolPath = @"IIS://localhost/W3SVC/AppPools/" + AppolName;
try
{
var appPoolEntry = new DirectoryEntry(appPoolPath);
appPoolEntry.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
appPoolEntry.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
appPoolEntry.Invoke("SetInfo", null);
appPoolEntry.CommitChanges();
appPoolEntry.Close();
}
catch
{ }
virtualDirectory.CommitChanges();
virtualDirectory.Close();
}
} /// <summary>
/// Get web site directory.
/// </summary>
/// <param name="websiteName"></param>
/// <returns></returns>
private static DirectoryEntry GetWebisteDirectory(string websiteName)
{
DirectoryEntries des = iisSite.Children;
foreach (DirectoryEntry sub in des)
{
if (sub.SchemaClassName == "IIsWebServer" && sub.Properties["ServerComment"].Contains(websiteName.Trim()))
{ return sub;
}
}
return null;
}
}
}

C# 操作IIS -App & AppPools的更多相关文章

  1. C#操作IIS程序池及站点的创建配置

    最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主要包括对IIS进行站点的新建以及新建站点的NET版本的选择,还有针对IIS7程序池的托管模式以及版本的操作:首先要对Microso ...

  2. C#操作IIS完整解析

    原文:C#操作IIS完整解析 最近在为公司实施做了一个工具,Silverlight部署早已是轻车熟路, 但对于非技术人员来说却很是头疼的一件事,当到现场实施碰到客户情况也各不相同, 急需一个类似系统备 ...

  3. C#操作IIS程序池及站点的创建配置(转)

      原文:http://www.cnblogs.com/wujy/archive/2013/02/28/2937667.html 最近在做一个WEB程序的安装包:对一些操作IIS进行一个简单的总结:主 ...

  4. C#操作IIS服务

    进入正题:先从使用角度来讲解IIS操作,然后再深入到具体的IIS服务底层原理. [1]前提掌握要点: (1).IIS到目前经历了四个版本分别为 IIS4.0 IIS5.0 IIS6.0 IIS7.0, ...

  5. C# 使用代码来操作 IIS

    由于需要维护网站的时候,可以自动将所有的站点HTTP重定向到指定的静态页面上. 要操作 IIS 主要使用到的是“Microsoft.Web.Administration.dll”. 该类库不可以在引用 ...

  6. .net操作IIS,新建网站,新建应用程序池,设置应用程序池版本,设置网站和应用程序池的关联

    ServerManager类用来操作IIS,提供了很多操作IIS的API.使用ServerManager必须引用Microsoft.Web.Administration.dll,具体路径为:%wind ...

  7. 利用ASP.NET操作IIS (可以制作安装程序)

    很多web安装程序都会在IIS里添加应用程序或者应用程序池,早期用ASP.NET操作IIS非常困难,不过,从7.0开始,微软提供了 Microsoft.Web.Administration 类,可以很 ...

  8. c#操作IIS站点

    /// <summary> /// 获取本地IIS版本 /// </summary> /// <returns></returns> public st ...

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

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

随机推荐

  1. 学SpringMVC收藏

     一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...

  2. c#跟objective-c语言特性

    c#跟objective-c语言特性的对比 拿c#语言跟objective-c做个对比,记录下自己认为是差不多的东西. 学过objc的人相信对category这个东西肯定不陌生,它可以让我们在没有源码 ...

  3. noip推荐系列:遥控车[字符串+高精+二分答案]

    [问题描述] 平平带着韵韵来到了游乐园,看到了n辆漂亮的遥控车,每辆车上都有一个唯一的名字name[i].韵韵早就迫不及待地想玩名字是s的遥控车.可是韵韵毕竟还小,她想象的名字可能是一辆车名字的前缀( ...

  4. asp.net打印网页后自动关闭网页【无需插件】

    项目遇需要网页加载自动打印网页后需要自动关闭该网页,但是百度了好久发现都是需要插件什么的 于是就自己摸索摸索,用js弄了个定时器,意外的发现,当打印设置窗口弹出后,定时器就暂停了 不管你点击取消或者打 ...

  5. Hadoop能力测试图谱

    一张图测试你的Hadoop能力-Hadoop能力测试图谱 1.引言 看到一张图,关于Hadoop技术框架的图,基本上涉及到Hadoop当前应用的主要领域,感觉可以作为测试Hadoop开发人员当前能力和 ...

  6. Sublime2 Text编辑器使用技巧

        Sublime2 Text编辑器使用技巧 ------------------------------------软件使用----------------------------------- ...

  7. ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)

    再正式开始之前,先来介绍一下IOS的键盘类型: 一.键盘风格 UIKit框架支持8种风格键盘 typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 ...

  8. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

  9. 记录最近在使用sprintf构造字符串时遇到的一个问题

    直接上代码: #include "stdio.h" #include "string.h" int main() { char szTmp[20] = {0}; ...

  10. asp.net mvc框架的一些切入点

    IhttpModule+配置文件,对请求进行进一步的整理.过滤与转发: global文件中以Application_xx的保护方法进行切入的方式,此方法等同于IHttpModule方法.IHttpMo ...