程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#創立IIS虛擬目次的辦法

C#創立IIS虛擬目次的辦法

編輯:C#入門知識

C#創立IIS虛擬目次的辦法。本站提示廣大學習愛好者:(C#創立IIS虛擬目次的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#創立IIS虛擬目次的辦法正文


本文實例講述了C#創立IIS虛擬目次的辦法。分享給年夜家供年夜家參考。詳細剖析以下:

DirectoryEntry是.Net給我們的一年夜禮品,他的名字我們就曉得他的功效--目次進口。應用過ADSI的人都曉得操作IIS,WinNT這些時,我們還須要供給他們的Path,操作IIS時,這個Path的格局為: 
IIS://ComputerName/Service/Website/Directory

ComputerName:即操作的辦事器的名字,可所以名字也能夠是IP,常常用的就是localhost 
Service:即操作的辦事器,IIS中有Web,也有FTP,還有SMTP這些辦事,我們重要是操作IIS的Web功效,是以此處就是"W3SVC",假如是FTP則應是"MSFTPSVC" 
WebSite:一個IIS辦事中可以包含許多的站點,這個就用於設置操作的站點。他的值是一個數字,默許是1,表現缺省站點,假如有其它,則從1開端順次類推。
Directory:不消說,即操作的目次稱號,一個站點普通頂層目次為"ROOT",其它目次則是他的孩子(Child)。

起首我們獲得一個站點的頂層目次(根目次):
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");

假如我們創立這個對象是沒有產生異常,則表現這個目次是真實存在的。

上面我們來添加新的虛擬目次,好比我們要加的是"Aspcn":

DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn","IIsWebVirtualDir"); 
newVirDir.Invoke("AppCreate",true); 
newVirDir.CommitChanges(); 
rootfolder.CommitChanges();

創立目次的思緒很簡略,即在根目次的子集(rootfolder.Children)中再添加一筆記錄,這裡應用的是DirectoryEntries類中的Add辦法,它前往的是一個DirectoryEntry,表現新參加的目次,第一個參數是虛擬目次的名字,第二個則是Schema的類名以注解我們參加的目次類型。然後再應用DirectoryEntry的Invoke辦法,挪用ADSI中的"AppCreate"辦法將目次真正創立(仿佛不走這一步也能夠創立目次勝利,然則為了保險起見,年夜家照樣用吧),最初就是順次挪用新、根目次的CommitChanges辦法,確認此次操作。 

在創立新目次時,我們也能夠同時給這個目次的屬性賦值,然則我的實戰經歷告知我,最好不要如許做,假如創立時就賦值,將有許多屬性不克不及賦值勝利,好比主要的表現真實目次的Path屬性。是以飛刀建議年夜家最好是先創立目次,然後再賦值,即更新目次信息。

更新虛擬目次 

信任年夜家對IIS都比擬熟習,懂得IIS中一些主要的設置,如可讀(AccessRead)、可寫(AccessWrite)、可履行(AccessExecute)等。這些都可經由過程對DirectoryEntry的Properties屬性聚集的賦值來完成。賦值可以經由過程兩種方法來完成: 

第一種是挪用Properties聚集的Add辦法,如: 
dir.Properties["AccessRead"].Add(true);

第二種是對第一個索引值賦值: 
dir.Properties["AccessRead"][0] = true;
這兩種辦法都是可行的。詳細是要看你的愛好了。 
在停止賦值之前我們照樣要肯定要要賦值的目的吧:)這裡我們應用DirectoryEntries類的Find辦法,如: 
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
找到了,我們便可以賦值了。賦值時必定要好悅目看啊,虛擬目次的屬性值可以超多,一查一年夜堆。。:(太多了,飛刀我也不反復了,年夜家去微軟的站點上查:) 
比擬經常使用的有:
AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path

刪除虛擬目次

刪除虛擬目次的辦法也很簡略,就是找到你要刪除的虛擬目次,然後挪用AppDelete辦法。

DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir"); 
de.Invoke("AppDelete",true); 
rootfolder.CommitChanges(); 

還有一種辦法,就是挪用Root目次的Delete辦法。

object[] paras = new object[2]; 
paras[0] = "IIsWebVirtualDir"; //表現操作的是虛擬目次 
paras[1] = "Aspcn"; 
rootfolder.Invoke("Delete",paras); 
rootfolder.CommitChanges(); 
System.DirectoryServices.DirectoryEntries

IIs創立虛擬目次

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace Install_IIS
{
  class IISManager
  {
    public IISManager() 
    { 
    } 
    /// <summary>
    /// 創立虛擬目次
    /// </summary>
    /// <param name="WebSite">辦事器站點稱號</param>
    /// <param name="VDirName">虛擬目次稱號</param>
    /// <param name="Path"></param>
    /// <param name="RootDir"></param>
    /// <param name="chkRead"></param>
    /// <param name="chkWrite"></param>
    /// <param name="chkExecute"></param>
    /// <param name="chkScript"></param>
    /// <param name="chkAuth"></param>
    /// <param name="webSiteNum">1</param>
    /// <param name="serverName">localhost</param>
    /// <returns></returns>
    public string CreateVDir(string WebSite,string VDirName, string Path, bool RootDir, bool chkRead,bool chkWrite, bool chkExecute, bool chkScript, bool chkAuth, int webSiteNum, string serverName) 
    { 
      string sRet=String.Empty; 
      System.DirectoryServices.DirectoryEntry IISSchema; 
      System.DirectoryServices.DirectoryEntry IISAdmin; 
      System.DirectoryServices.DirectoryEntry VDir; 
      bool IISUnderNT;
      // 
      // 肯定IIS版本
      // 
      IISSchema = new System.DirectoryServices.DirectoryEntry("IIS://" + serverName + "/Schema/AppIsolated"); 
      if(IISSchema.Properties["Syntax"].Value.ToString().ToUpper()=="BOOLEAN") 
        IISUnderNT=true; 
      else 
        IISUnderNT=false; 
      IISSchema.Dispose();
      // 
      // Get the admin object 
      // 取得治理權限
      // 
      IISAdmin=new System.DirectoryServices.DirectoryEntry("IIS://" +serverName +"/W3SVC/" + webSiteNum + "/Root");
 
      if (IISAdmin == null)
        return "IIS 未正常裝置";
      if (IISAdmin.Children == null)
        return "IIS 能夠未啟動";
      // 
      // If we're not creating a root directory 
      // 假如我們不克不及創立一個根目次
      // 
      if (!RootDir) 
      { 
        // 
        // If the virtual directory already exists then delete it 
        // 假如虛擬目次曾經存在則刪除
        //
        foreach(System.DirectoryServices.DirectoryEntry v in IISAdmin.Children) 
        { 
          if (v.Name == VDirName) 
          { 
            // Delete the specified virtual directory if it already exists 
            try 
            { 
            IISAdmin.Invoke("Delete", new string [] { v.SchemaClassName, VDirName }); 
            IISAdmin.CommitChanges(); 
            } 
            catch(Exception ex) 
            { 
            sRet+=ex.Message; 
            } 
          } 
        } 
      }  
      // 
      // Create the virtual directory 
      // 創立一個虛擬目次
      // 
      if (!RootDir) 
      { 
        VDir = IISAdmin.Children.Add(VDirName, "IIsWebVirtualDir"); 
      } 
      else 
      { 
        VDir = IISAdmin; 
      }
      // 
      // Make it a web application 
      // 創立一個web運用
      // 
      VDir.Properties["Path"][0] = Path;
      //設置虛擬目次指向的物理途徑
      if (IISUnderNT) 
      { 
        VDir.Invoke("AppCreate", false); 
      } 
      else 
      { 
        VDir.Invoke("AppCreate", 1); 
      } 
      // 
      // Setup the VDir 
      // 設置虛擬目次
      // 
      VDir.Properties["AccessRead"][0] = chkRead; //設置讀取權限
      VDir.Properties["AccessExecute"][0] = chkExecute; //設置履行權限
      VDir.Properties["AccessWrite"][0] = chkWrite; //設置寫入權限
      VDir.Properties["AccessScript"][0] = chkScript; //履行權限
      VDir.Properties["DefaultDoc"][0] = "index.asp,Default.aspx";//設置默許文檔,多值情形下中央用逗號朋分
      VDir.Properties["AppFriendlyName"][0] = VDirName; //運用法式稱號
      VDir.Properties["AuthFlags"][0] = 0;  //  設置目次的平安性,0表現不許可匿名拜訪,1為許可,3為根本身份驗證,7為windows繼續身份驗證
      VDir.Properties["AuthNTLM"][0] = chkAuth; 
      VDir.Properties["EnableDefaultDoc"][0] = true; 
      VDir.Properties["EnableDirBrowsing"][0] = false; 
      // 
      // NT doesn't support this property 
      // NT格局不支撐這特征
      // 
      if (!IISUnderNT) 
      { 
        VDir.Properties["AspEnableParentPaths"][0] = true; 
      }
      // 
      // Set the changes 
      // 設置轉變
      // 
      VDir.CommitChanges();
      //上面的辦法是獲得一切屬性稱號的辦法:
      foreach (PropertyValueCollection pvc in VDir.Properties)
      {
        Console.WriteLine(pvc.PropertyName);
      }
      sRet+= "VRoot " +VDirName + " created!"; 
      return sRet; 
    }
     #region Properties 
    public string ServerName 
    { 
    get 
    { 
    return _serverName; 
    } 
    set 
    { 
    _serverName = value; 
    } 
    } 
    #endregion
    public static string VirDirSchemaName = "IIsWebVirtualDir";
    #region Private Members  
    private string _serverName;
    #endregion 
  } 
}

測試用:
MessageBox.Show(new IISManager().CreateVDir("localhost", "ietm", "c:\\myweb", false, true, false, false, true, false, 1, "localhost"));

這個我已投入項目中應用,可寧神應用。

願望本文所述對年夜家的C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved