2012-02-02 52 views
55

我開發的工具需要將訪問權限「完全控制」授予由其創建的文件。它需要閱讀,修改和刪除所有Windows帳戶,甚至可能的未來帳戶。這可以實現嗎?如何授予我的應用程序爲所有用戶創建的文件的完整權限?

我知道我可以試試這個一SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow); 
FileSecurity fSecurity = File.GetAccessControl(filePath); 
fSecurity.SetAccessRule(rule); 
File.SetAccessControl(filePath, fSecurity); 

但我怎麼也發放給了所有用戶?甚至可能的未來賬戶?如果後一部分不可行,怎麼去解決第一個要求?

謝謝。

編輯:

這是我工作的代碼。取自回答者的鏈接。

private bool GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule("everyone", FileSystemRights.FullControl, 
                InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, 
                PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
    return true; 
} 

注意這是需要的PropagationFlags.NoPropagateInherit(在鏈接朝最後提到的)。它確實授予甚至未來帳戶的特權。

+16

請注意,不要使用「everyone」,而要使用'new SecurityIdentifier(WellKnownSidType.WorldSid,null)',它返回一個SecurityIdentifier對象。每個人只能在英文窗口安裝,使用其他方法確保它與多種語言版本兼容。 – 2013-04-24 15:17:21

+0

@trukin你能讓它成爲答案嗎?謝謝 – nawfal 2013-04-24 18:27:56

+0

@nawfal:我遇到了同樣的問題,我需要在安裝應用程序時訪問我的安裝文件夾,但我可以在哪裏編寫此代碼? – 2018-01-09 07:33:51

回答

96

請注意使用此功能的人。

當使用文字字符串FileSystemAccessRule時,應該是WellKnownSidType.WorldSid而不是"everyone"

原因是因爲有多種Window語言,每個人都只適用於EN語言,所以對於西班牙語來說,它可能是「Todos」(或別的東西)。

using System.Security.AccessControl; 
using System.Security.Principal; 
using System.IO; 

private void GrantAccess(string fullPath) 
{ 
    DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
    DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
    dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
    dInfo.SetAccessControl(dSecurity); 
} 
+0

我認爲這是一個最好的方式來允許完全控制.... – IremadzeArchil19910311 2014-07-31 14:09:51

+0

非常感謝你..一直在努力解壓文件和設置.mdf文件的權限(因爲我得到只讀錯誤)。謝謝! – CularBytes 2015-01-24 15:17:20

+0

我可以問一下返回值的目的嗎? – hypehuman 2015-06-26 21:26:28

12

您需要完全控制機器上的「每個人」組。在MSDN上發佈了關於它的this帖子。

希望這對你有用。

+0

謝謝,我看到了。這是否允許訪問未來的帳戶? – nawfal 2012-02-02 07:26:35

+0

感謝它確實工作,並授予對未來用戶帳戶的訪問權限。請接受我的編輯,以便其他人知道究竟應該做什麼。 – nawfal 2012-02-02 11:18:52

+0

很高興爲你效勞。 – 2012-02-02 11:20:07

相關問題