码迷,mamicode.com
首页 > Windows程序 > 详细

C#修改文件夹权限

时间:2015-08-21 07:06:52      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

using System;
技术分享using System.Collections.Generic;
技术分享using System.Linq;
技术分享using System.Text;
技术分享
技术分享 
技术分享using System.DirectoryServices;
技术分享using System.Collections;
技术分享using System.Text.RegularExpressions;
技术分享using System.IO;
技术分享using System.Security.AccessControl;
技术分享using System.Data.SqlClient;
技术分享using System.Data.Sql;
技术分享 
技术分享using System.Data;
技术分享 
技术分享 
技术分享 
技术分享
技术分享namespace ClassLibrary
技术分享{
技术分享    public class IISClass
技术分享    {
技术分享        #region UserName,Password,HostName的定义
技术分享        public static string HostName
技术分享        {
技术分享            get
技术分享            {
技术分享                return hostName;
技术分享            }
技术分享            set
技术分享            {
技术分享                hostName = value;
技术分享            }
技术分享        }
技术分享        public static string UserName
技术分享        {
技术分享            get
技术分享            {
技术分享                return userName;
技术分享            }
技术分享            set
技术分享            {
技术分享                userName = value;
技术分享            }
技术分享        }
技术分享        public static string Password
技术分享        {
技术分享            get
技术分享            {
技术分享                return password;
技术分享            }
技术分享            set
技术分享            {
技术分享                if (UserName.Length <= 1)
技术分享                {
技术分享                    throw new ArgumentException("还没有指定好用户名。请先指定用户名");
技术分享                }
技术分享                password = value;
技术分享            }
技术分享        }
技术分享        public static void RemoteConfig(string hostName, string userName, string password)
技术分享        {
技术分享            HostName = hostName;
技术分享            UserName = userName;
技术分享            Password = password;
技术分享        }
技术分享        private static string hostName = "localhost";
技术分享        private static string userName = "qf";
技术分享        private static string password = "qinfei";
技术分享        #endregion
技术分享        #region 根据路径构造Entry的方法
技术分享        /// <summary>
技术分享        /// 根据是否有用户名来判断是否是远程服务器。
技术分享        /// 然后再构造出不同的DirectoryEntry出来
技术分享        /// </summary>
技术分享        /// <param name="entPath">DirectoryEntry的路径</param>
技术分享        /// <returns>返回的是DirectoryEntry实例</returns>

        public static DirectoryEntry GetDirectoryEntry(string entPath)        

{           

 DirectoryEntry ent;   

         if (UserName == null)        

    {                

       ent = new DirectoryEntry(entPath);  

          }           

          else     

       {           

             ent = new DirectoryEntry(entPath, HostName + "\\" + UserName, Password, AuthenticationTypes.Secure);           

            //ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);         

         }         

   return ent;    

    }      

  #endregion      

  #region 添加,删除网站的方法      

  public static void CreateNewWebSite(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)   

     {          

  if (!EnsureNewSiteEnavaible(hostIP + portNum + descOfWebSite))       

     {          

      throw new ArgumentNullException("已经有了这样的网站了。" + Environment.NewLine + hostIP + portNum + descOfWebSite);       

     }         

   string entPath = String.Format("IIS://{0}/w3svc", HostName);    

        DirectoryEntry rootEntry = GetDirectoryEntry(entPath);//取得iis路径     

       string newSiteNum = GetNewWebSiteID(); //取得新网站ID     

       DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer"); //增加站点    

        newSiteEntry.CommitChanges();//保存对区域的更改(这里对站点的更改)       

     newSiteEntry.Properties["ServerBindings"].Add(":"+portNum+":");  //(hostIP + portNum + descOfWebSite);          

  newSiteEntry.Properties["ServerComment"].Value= commentOfWebSite ;          

  newSiteEntry.Properties["AccessRead"].Add(true); //增加 读取权限    

      //  newSiteEntry.Properties["AppFriendlyName"].Add("DefaultAppPool");      

    //  System.DirectoryServices.DirectoryEntry appPoolRoot = new System.DirectoryServices.DirectoryEntry(@"IIS://" + HostName + "/W3SVC/AppPools");   

      //   newSiteEntry.Properties["ApplicationProtection"].Value="vsdapMedium";         

   newSiteEntry.Properties["DefaultDoc"][0] = "Default.aspx";         

      //默认文档            

   newSiteEntry.Properties["AuthNTLM"][0] = true;  // 指定集成 Windows 身份验证       

               newSiteEntry.CommitChanges();              

           DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");        

     vdEntry.CommitChanges();        

     vdEntry.Properties["Path"].Value = webPath;          

   #region 增加站点的应用程序设置         

    vdEntry.Invoke("AppCreate", true);      

        vdEntry.Properties["AppFriendlyName"].Value = commentOfWebSite;// 友好的显示名称        

     vdEntry.Properties["AppIsolated"].Value = 2; // 值 0 表示应用程序在进程内运行,值 1 表示进程外,值 2 表示进程池         

    vdEntry.Properties["AccessScript"][0] = true;      

   // 可执行脚本。执行权限下拉菜单中      

       vdEntry.Properties["AuthNTLM"][0] = true;  // 指定集成 Windows 身份验证          

   #endregion           

  vdEntry.CommitChanges();         

    #region 增加虚拟目录aspnet_client        

     try            

 {              

   DirectoryEntry _RootFolder = new DirectoryEntry("IIS://" + HostName + "/W3SVC/" + newSiteNum + "/Root");      

           DirectoryEntry _VirDir = _RootFolder.Children.Add("aspnet_client", "IIsWebVirtualDir");     

            _VirDir.Properties["Path"].Value = @"C:\Inetpub\wwwroot\aspnet_client";  //webPath;  //设置路径     

             _VirDir.Invoke("AppCreate", true);        

         //设置名称              

    _VirDir.Properties["AppFriendlyName"].Value = "aspnet_client";            

     _VirDir.Properties["AppIsolated"].Value = 2;             

    _VirDir.Properties["AccessScript"][0] = true;         // 可执行脚本。执行权限下拉菜单中          

       _VirDir.CommitChanges();//更改目录               

   _RootFolder.CommitChanges();      //更改根目录        

      }           

  catch      

       {           

      //MessageBox.Show("共享目录已存在,不进行共享操作!");         

    }            

 #endregion    

    }      

  /// <summary>     

   /// 删除一个网站。根据网站名称删除。        

/// </summary>      

  /// <param name="siteName">网站名称</param>   

     public static void DeleteWebSiteByName(string siteName) 

       {         

   string siteNum = GetWebSiteNum(siteName);         

   string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);      

      DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);           

 string rootPath = String.Format("IIS://{0}/w3svc", HostName);        

    DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);          

  rootEntry.Children.Remove(siteEntry);         

   rootEntry.CommitChanges();        }       

 #endregion       

 #region 确认网站是否相同   

     /// <summary>      

  /// 确定一个新的网站与现有的网站没有相同的。   

     /// 这样防止将非法的数据存放到IIS里面去    

    /// </summary>      

  /// <param name="bindStr">网站邦定信息</param>  

      /// <returns>真为可以创建,假为不可以创建</returns>    

    public static bool EnsureNewSiteEnavaible(string bindStr) 

       {          

  string entPath = String.Format("IIS://{0}/w3svc", HostName);   

         DirectoryEntry ent = GetDirectoryEntry(entPath);  

          foreach (DirectoryEntry child in ent.Children)   

         {              

  if (child.SchemaClassName == "IIsWebServer") 

               {        

            if (child.Properties["ServerBindings"].Value != null)  

                  {                     

   if (child.Properties["ServerBindings"].Value.ToString() == bindStr)         

               {                      

      return false;              

          }           

         }         

       }          

  }            

return true;    

    }     

   #endregion   

     #region 获取新网站id的方法      

  /// <summary>     

   /// 获取网站系统里面可以使用的最小的ID。   

     /// 这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。   

     /// 这里面的算法经过了测试是没有问题的。       

 /// </summary>     

   /// <returns>最小的id</returns>    

    public static string GetNewWebSiteID()     

   {          

  ArrayList list = new ArrayList();      

      string tmpStr;       

     string entPath = String.Format("IIS://{0}/w3svc", HostName);        

    DirectoryEntry ent = GetDirectoryEntry(entPath);      

      foreach (DirectoryEntry child in ent.Children)       

     {         

       if (child.SchemaClassName == "IIsWebServer")          

      {                  

  tmpStr = child.Name.ToString();                

    list.Add(Convert.ToInt32(tmpStr));       

         }       

     }         

   list.Sort();     

       int i = 1;            foreach (int j in list)            {                if (i == j)                {                    i++;                }            }            return i.ToString();        }        #endregion                #region 设置目录访问权限    //// <summary>    /// 为创建的临时文件分配权限    /// </summary>    /// <param name="pathname"></param>    /// <param name="username"></param>        /// <param name="power">  </param>    /// <remarks> 用法: addpathPower("指定目录路径", "Everyone", "FullControl"); //Everyone表示用户名  //FullControl为权限类型</remarks>    public string addpathPower(string pathname, string username, string power)    {        DirectoryInfo dirinfo = new DirectoryInfo(pathname);        if ((dirinfo.Attributes & FileAttributes.ReadOnly) != 0)        {            dirinfo.Attributes = FileAttributes.Normal;        }        //取得访问控制列表        DirectorySecurity dirsecurity = dirinfo.GetAccessControl();        try        {            switch (power)            {                case "FullControl":                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));                    dirinfo.SetAccessControl(dirsecurity);                    break;                case "ReadOnly":                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Read, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));                    dirinfo.SetAccessControl(dirsecurity);                    break;                case "Write":                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Write, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));                    dirinfo.SetAccessControl(dirsecurity);                    break;                case "Modify":                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.Modify, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));                    dirinfo.SetAccessControl(dirsecurity);                    break;                case "ReadAndExecute": //读取和运行                    dirsecurity.AddAccessRule(new FileSystemAccessRule(username, FileSystemRights.ReadAndExecute, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));                    dirinfo.SetAccessControl(dirsecurity);                    break;            }            dirsecurity.AddAccessRule(new FileSystemAccessRule("Everyone",FileSystemRights.ReadAndExecute,AccessControlType.Allow));            dirinfo.SetAccessControl(dirsecurity);                        }        catch (Exception e)        {            return e.Message.ToString();        }        return "true";    }    #endregion           }}

C#修改文件夹权限

标签:

原文地址:http://www.cnblogs.com/mr-lee1976/p/4746740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!