C#实现创建,删除,查找,配置虚拟目录实例详解

本文实例讲述了C#实现创建,删除,查找,配置虚拟目录的方法。分享给大家供大家参考。具体如下:

#region<<虚拟目录>>
/// <summary>
/// 创建虚拟目录
/// </summary>
/// <param >虚拟目录别名</param>
/// <param >内容所在路径</param>
public static bool CreateVirtualDirectory(string webSite,string virtualName, string path)
{
 if (virtualName.Equals(string.Empty) || (!Directory.Exists(path)))
 {
  MessageBox.Show("1.虚拟目录别名不能为空/r/n 2.虚拟目录内容所在路径可能不存在", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  return false;
 }
 try
 {
  DirectoryEntry tbEntry = FindVirtualDir(webSite,virtualName);//查找虚拟目录
  if (tbEntry == null) //找不到则创建虚拟目录
  {
   string IISpath = "IIS://localhost/W3SVC/"+webSite+"/ROOT";//IIS参数格式
   System.DirectoryServices.DirectoryEntry root = new DirectoryEntry(IISpath);
   tbEntry = root.Children.Add(virtualName, root.SchemaClassName);//创建虚拟目录
  }
  return UpdateVirDir(tbEntry, path, virtualName);
 }
 catch (Exception ex)
 {
  MessageBox.Show("1.请确认IIS是否已经安装/r/n2.虚拟目录有可能已经存在/r/n (Error:" + ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  WriterLog("CreateVir:/r/n" + ex.ToString());
  return false;
 }
}
/// <summary>
/// 获取网站列表
/// </summary>
/// <returns></returns>
public static List<webSiteInfo> GetWebSiteList()
{
 try
 {
  List<webSiteInfo> infoList = new List<webSiteInfo>();
  DirectoryEntry deRoot = new DirectoryEntry("IIS://localhost/W3SVC");
  foreach (DirectoryEntry e in deRoot.Children)
  {
   webSiteInfo info = new webSiteInfo();
   PropertyValueCollection pvc = e.Properties["ServerBindings"];
   if (pvc.Count <= 0)
    continue;
   String[] srvBindings = pvc[0].ToString().Split(':');
   info.IpAddress = srvBindings[0] == string.Empty ? appCode.ToolBox.GetIP() : srvBindings[0];//绑定的IP地址
   info.Port = srvBindings[1];//对应端口号
   info.Name = e.Name;//所在站点索引
   infoList.Add(info);
  }
  return infoList;
 }
 catch (Exception ex)
 {
  WriterLog(ex.ToString());
  return null;
 }
}
/// <summary>
/// 删除虚拟目录
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
public static bool DelVirtualDirectory(string webSite,string nameDirectory)
{
 try
 {
  DirectoryEntry deRoot = new DirectoryEntry("IIS://localhost/W3SVC/" + webSite + "/ROOT");
  try
  {
   deRoot.Children.Remove(FindVirtualDir(webSite,nameDirectory));
   deRoot = null;
   return true;
  }
  catch
  {
   return true;
  }
 }
 catch (Exception e)
 {
  WriterLog(e.ToString());
  return false;
 }
}
/// <summary>
/// 修改虚拟目录
/// </summary>
/// <param ></param>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
public static bool UpdateVirDir(DirectoryEntry tbEntry, string path, string virtualName)
{
 if (tbEntry == null)
  return false;
 tbEntry.Properties["Path"][0] = path;//物理目录
 tbEntry.Invoke("AppCreate", true);//创建应用程序
 tbEntry.Properties["AccessRead"][0] = true;//允许访问
 tbEntry.Properties["ContentIndexed"][0] = true; ;//
 tbEntry.Properties["DefaultDoc"][0] = "index.asp,Default.aspx";
 tbEntry.Properties["AppFriendlyName"][0] = virtualName;//应用程序名
 tbEntry.Properties["AccessScript"][0] = true;//访问权限
 tbEntry.Properties["DontLog"][0] = true;//日志
 tbEntry.Properties["AuthFlags"][0] = 1;//验证,0不,1允许,3基本身份
 tbEntry.CommitChanges();//开始应用属性
 return true;
}
/// <summary>
/// 查找虚拟目录
/// </summary>
/// <param ></param>
/// <returns></returns>
public static DirectoryEntry FindVirtualDir(string webSite,string virtualName)
{
 if (virtualName.Equals(string.Empty))
 {
  MessageBox.Show("虚拟目录别名不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  return null;
 }
 try
 {
  string IISpath = "IIS://localhost/W3SVC/" + webSite + "/ROOT";//IIS参数格式
  System.DirectoryServices.DirectoryEntry root = new DirectoryEntry(IISpath);//实例IIS类
  return root.Children.Find(virtualName, root.SchemaClassName);//查找虚拟目录)
 }
 catch (Exception ex)
 {
  WriterLog("虚拟目录不存在: " + ex.Message);
  return null;
 }
}
/// <summary>
/// 为虚拟目录增加扩展名
/// </summary>
/// <param >虚拟目录名</param>
/// <param >扩展名列表</param>
public static void SetMime(string webSite,string virtualName, Dictionary<string, string> exList)
{
 if (virtualName.Equals(string.Empty))
 {
  MessageBox.Show("虚拟目录别名不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  return;
 }
 DirectoryEntry tbEntry = FindVirtualDir(webSite, virtualName);
 if (tbEntry == null)
  return;
 System.DirectoryServices.PropertyValueCollection mime = tbEntry.Properties["MimeMap"];
 foreach (string e in exList.Keys)
 {
  IISOle.MimeMapClass Ex = new IISOle.MimeMapClass();
  Ex.Extension = e;
  Ex.MimeType = exList[e];
  if (ContianValue(Ex, mime) != null)
   continue;
  mime.Add(Ex);
  Ex = null;
 }
 tbEntry.CommitChanges();
}
/// <summary>
/// 删除扩展名
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
public static bool DelMime(IISOle.IISMimeType type,string webSite, string virtualName)
{
 DirectoryEntry tbEntry = FindVirtualDir(webSite, virtualName);
 if (tbEntry == null)
  return false;
 System.DirectoryServices.PropertyValueCollection mime = tbEntry.Properties["MimeMap"];
 object v = ContianValue(type, mime);
 if (v != null)
  mime.Remove(v);
 tbEntry.CommitChanges();
 return true;
}
/// <summary>
/// 搜索取指定扩展名对象
/// </summary>
/// <param ></param>
/// <param ></param>
/// <returns></returns>
private static object ContianValue(IISOle.IISMimeType type, PropertyValueCollection mime)
{
 foreach (object v in mime)
 {
  IISOle.IISMimeType e = (IISOle.IISMimeType)v;
  if (type.Extension.ToLower().Equals(e.Extension.ToLower()) && (type.MimeType.ToLower().Equals(e.MimeType.ToLower())))
  {
   e = null;
   return v;
  }
 }
 return null;
}
/// <summary>
/// 获得虚拟目录的扩展名列表
/// </summary>
/// <param ></param>
/// <returns></returns>
public static Dictionary<string, string> GetMimeList(string webSite,string virtualName)
{
 if (virtualName.Equals(string.Empty))
 {
  MessageBox.Show("虚拟目录别名不能为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  return null;
 }
 try
 {
  Dictionary<string, string> Res = new Dictionary<string, string>();
  DirectoryEntry tbEntry = FindVirtualDir(webSite,virtualName);
  if (tbEntry == null)
   return null;
  System.DirectoryServices.PropertyValueCollection _mime = tbEntry.Properties["MimeMap"];
  foreach (object e in _mime)
  {
   IISOle.IISMimeType v = (IISOle.IISMimeType)e;
   if (!Res.ContainsKey(v.Extension))
    Res.Add(v.Extension, v.MimeType);
   v = null;
  }
  return Res;
 }
 catch (Exception ex)
 {
  WriterLog("GetMimeList; " + ex.Message);
  return null;
 }
}
#endregion

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • 用C#操纵IIS(代码)

    using System;  using System.DirectoryServices;  using System.Collections;  using System.Text.RegularExpressions;  using System.Text;  /**   * @author 吴海燕   * @email  wuhy80-usual@yahoo.com   * 2004-6-25 第一版   */   namespace Wuhy.ToolBox  {       /// 

  • C#创建IIS虚拟目录的方法

    本文实例讲述了C#创建IIS虚拟目录的方法.分享给大家供大家参考.具体分析如下: DirectoryEntry是.Net给我们的一大礼物,他的名字我们就知道他的功能--目录入口.使用过ADSI的人都知道操作IIS,WinNT这些时,我们还需要提供他们的Path,操作IIS时,这个Path的格式为: 复制代码 代码如下: IIS://ComputerName/Service/Website/Directory ComputerName:即操作的服务器的名字,可以是名字也可以是IP,经常用的就是lo

  • C#修改IIS站点framework版本号的方法

    本文实例讲述了C#修改IIS站点framework版本号的方法.分享给大家供大家参考.具体如下: 使用ASP.NET IIS 注册工具 (Aspnet_regiis.exe)可以方便地更新 ASP.NET 应用程序的脚本映射,使其指向与该工具关联的 ASP.NET ISAPI 版本. 关于ASP.NET IIS 注册工具的更详细的内容,请参考MSDN. 在控制台上我们使用下面的命令可以修改一个虚拟目录的Asp.Net版本: 复制代码 代码如下: Aspnet_iis.exe –s path 我们

  • C#实现获取IIS站点及虚拟目录信息的方法

    本文实例讲述了C#实现获取IIS站点及虚拟目录信息的方法.分享给大家供大家参考.具体如下: using System; using System.DirectoryServices; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DirectoryEntry rootEntr

  • c# 解决IIS写Excel的权限问题

    具体配置方法如下: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务" 3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击

  • c#操作iis根目录的方法

    本文实例讲述了c#操作iis根目录的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.DirectoryServices; using System.Collections; namespace IISManagement { /// <summary> /// IISManager 的摘要说明. /// </summary> public class IISManager { //定义需要使用的 private string _

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

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

  • C#操作IIS方法集合

    C# 操作IIS方法集合 如果在win8,win7情况下报错:未知错误(0x80005000) ----见http://www.jb51.net/article/72881.htm using System; using System.Collections; using System.Collections.Generic; using System.DirectoryServices; using System.Linq; using System.Net; using System.Tex

  • C#实现创建,删除,查找,配置虚拟目录实例详解

    本文实例讲述了C#实现创建,删除,查找,配置虚拟目录的方法.分享给大家供大家参考.具体如下: #region<<虚拟目录>> /// <summary> /// 创建虚拟目录 /// </summary> /// <param >虚拟目录别名</param> /// <param >内容所在路径</param> public static bool CreateVirtualDirectory(string w

  • Linux Nginx 配置SSL访问实例详解

    Linux Nginx 配置SSL访问实例详解 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $ openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR): $ openssl req -new -key server.key -out server.csr 在加载SSL支持的Nginx并使用上述私钥

  • oracle中创建序列及序列补零实例详解

    oracle中创建序列及序列补零实例详解 我们经常会在在DB中创建序列: -- Create sequence create sequence COMMON_SEQ minvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20 cycle; 我们的序列的最小值是从1开始,但是我们想让这种顺序取出来的序列的位数都一样,按照最大数的位数来算,我们需要8位的序列,那么我们就需要在1的前面补上7个零,只需要用下面的方法即可完成 se

  • .Net项目中NLog的配置和使用实例详解

    引言: 因为之前在项目开发中一直都是使用的Log4Net作为项目的日志记录框架,最近忽然感觉对它已经有点腻了,所以尝试着使用了NLog作为新项目的日志记录框架(当然作为一名有志向的攻城狮永远都不能只局限于眼前的技术,要不断的使用和学习新的技术).当然serilog也是一个不错的日志记录框架哟,不过今天主要还是要讲述的是NLog在项目中的配置和使用. NLog框架源码:https://github.com/NLog/NLog 一.导入NLog NuGet PackAge: 二.配置NLog 配置文

  • MongoDB数据库安装配置、基本操作实例详解

    本文实例讲述了MongoDB数据库安装配置.基本操作.分享给大家供大家参考,具体如下: 1.简介 NO SQL:NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是对不同于传统的关系数据库管理系统(RDBMS)的统称.NoSQL用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. RDBMS NOSQL - 高度组织化结构化数据 - 结构化查询语言(SQL) - 数据和关系都存储在单独的表中. - 数据操纵语言,数据定

  • Docker 手动配置容器网络实例详解

    Docker 手动配置容器网络 docker容器的网络是net命名空间与虚拟设备的结合,容器在启动时会创建一对虚拟接口veth pair,这一对接口分别放到本地和容器中,在本地的veth会被分配类似vethxxxx的名称并被桥接到指定网桥的上(默认为docker0),可以通过brctl show命令查看网桥上挂载的接口,在容器中的veth会从网桥获取一个未使用地址,该veth的名称会被更改为eth0并配置默认路由到vethxxxx,docker允许在启动容器的时候通过--net参数指定不同的网络

  • YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解

    本文实例讲述了YII Framework框架使用YIIC快速创建YII应用之migrate用法.分享给大家供大家参考,具体如下: yii migrate 查看帮助 /* /www/yii_dev/yii/framework# php yiic migrate help Error: Unknown action: help USAGE yiic migrate [action] [parameter] DESCRIPTION This command provides support for d

  • python 实现删除文件或文件夹实例详解

    python 实现删除文件或文件夹 最近自己学习Python 的知识,自己学习抓取网页的内容知识等,在学习的时候Python 删除文件夹或者文件知识的时候,觉得本篇内容不错,推荐给大家. 实例代码,仔细看注释明细: #-*- coding: UTF-8 -*- # 有时候要删除文件夹里文件或文件夹 # 这个小类用来删除文件或文件夹还是相当有用的 # 删除文件时有时希看到删除的结果,于是就有了这个Deleter了 # 下面的一些文件注释用的是Doxygen的样式 # 用了英文,先就不改回中文吧.

  • python 查找字符串是否存在实例详解

    python中查找指定的字符串的方法如下: code #查询 def selStr(): sStr1 = 'jsjtt.com' sStr2 = 'com' #index查询某个字符串,返回索引 nPos = sStr1.index(sStr2) if(nPos >=0): print 'sStr1中包括sStr2中的字符' print nPos #find 方法如果没有查询到返回-1 nPos2 = sStr1.find('abc') print nPos2 #查询到返回字符所在位置 prin

  • Linux查找特定程序whereis实例详解

    Linux 查找特定程序 whereis whereis 命令主要用于查找程序文件,并提供这个文件的二进制可执行文件.源代码文件和使用手册存放位置. 1.查找命令程序 例如,查找 touch 命令 [root@node1 /]# whereis touch touch: /usr/bin/touch /usr/share/man/man1/touch.1.gz 执行效果如下: 如果只需要查找 touch 命令的二进制文件,可以使用 -b 选项实现: [root@node1 /]# whereis

随机推荐