2012-07-14 103 views
1

我创建了一个应用程序,该应用程序将拒绝所有对文件夹的完全控制访问权限,直到某个用户使用正确的密码登录到该应用程序。我的锁定程序的来源是:文件夹锁定程序

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Security.AccessControl; 
using System.DirectoryServices; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      string Directoryd = "D:"; 
      string mydirectory = Directoryd + "\\" + "rs\\"; 
      if (!Directory.Exists(mydirectory)) 
      { 
       Directory.CreateDirectory(mydirectory); 
      } 
      DirectoryInfo di = new DirectoryInfo(mydirectory); 
      DirectorySecurity ds = di.GetAccessControl(); 


      ds.AddAccessRule(new FileSystemAccessRule(
       @"everyone", 
       FileSystemRights.FullControl, 
       AccessControlType.Deny)); 

      di.SetAccessControl(ds); 
     }  
    } 
} 

这将拒绝所有访问该文件夹d:/ RS/ 我还以为它解开的文件夹上的按钮按这样的脚本:

private void login_Click(object sender, EventArgs e) 
{ 
    string username = text1.Text; 
    string password = text2.Text; 
    if(username == "aname" && password == "password") 
    { 
     string Directoryd = "D:"; 
     string mydirectory = Directoryd + "\\" + "rs\\"; 
     if (!Directory.Exists(mydirectory)) 
     { 
      Directory.CreateDirectory(mydirectory); 
     } 
     DirectoryInfo di = new DirectoryInfo(mydirectory); 
     DirectorySecurity ds = di.GetAccessControl(); 


     ds.AddAccessRule(new FileSystemAccessRule(
      @"everyone", 
      FileSystemRights.FullControl, 
      AccessControlType.Allow)); 

     di.SetAccessControl(ds); 
    } 
} 

但是这显示访问被拒绝的错误。如何避免这个错误?

回答

2

拒绝权限的优先级高于允许。您必须删除拒绝权限才能添加另一个权限。

0

尝试更换此:

ds.AddAccessRule(new FileSystemAccessRule(@"everyone", FileSystemRights.FullControl, AccessControlType.Allow)); 
di.SetAccessControl(ds); 

ds.AddAccessRule(new FileSystemAccessRule(@"everyone", FileSystemRights.FullControl, AccessControlType.Deny)); 
di.RemoveAccessRule(ds); 

希望这会有所帮助。