2011-04-01 81 views
0

我試圖在沒有運氣的Windows 7上以編程方式爲每個人設置FullControl。無法設置FullControl目錄

var dirSec = dir.GetAccessControl(); 
var fsar = new FileSystemAccessRule(
    "Everyone", 
    FileSystemRights.FullControl, 
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, 
    PropagationFlags.InheritOnly, 
    AccessControlType.Allow); 

dirSec.AddAccessRule(fsar); 
dir.SetAccessControl(dirSec); 

這會爲Everyone組(列表和讀取)添加一些權限,但不是完全控制。如果我使用資源管理器編輯安全權限,我可以將其設置爲FullControl。任何想法爲什麼它失敗?我的嘗試沒有錯誤消息。

+0

我的猜測是,你的應用程序的進程沒有運行的升高,所以你沒有相應的權限來修改訪問級別。您是否嘗試以管理員身份運行應用程序(右鍵單擊該圖標,然後從上下文菜單中選擇「以管理員身份運行」)? – 2011-04-01 09:21:05

+0

應用程序以提升狀態運行 - 這就是爲什麼我無法弄清楚爲什麼它無法創建完整的控制權限。 – 2011-04-03 01:21:24

回答

1

這應該很好地工作:

string path = @"C:\test"; 
    DirectorySecurity ds = Directory.GetAccessControl(path); 
    ds.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow)); 
    Directory.SetAccessControl(path, ds); 

如果不工作,那麼看來你的應用程序沒有權限給那種訪問規則。嘗試實施模擬。下面是一個示例:WindowsIdentity Impersonation using C# Code

0
foreach (FileSystemRights permission in Enum.GetValues(typeof(FileSystemRights))) 
{ 
    myDirectorySecurity.AddAccessRule(
     new FileSystemAccessRule(user, 
           permission, 
           InheritanceFlags.ContainerInherit | 
            InheritanceFlags.ObjectInherit | 
            InheritanceFlags.None, 
           PropagationFlags.None, 
           AccessControlType.Allow)); 
}