私が開発するツールは、それによって作成されたファイルにアクセス権「フルコントロール」を付与する必要があります。すべての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(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
return true;
}
必要なPropagationFlags.NoPropagateInherit
に注意してください(リンクの最後に記載されています)。将来のアカウントにも特権を付与します。
これを使用している人々に注意してください。
FileSystemAccessRule
にリテラル文字列を使用する場合、WellKnownSidType.WorldSid
の代わりに "everyone"
。
その理由は、複数のウィンドウ言語があり、誰もがEN言語にのみ適用されるためです。したがって、スペイン語の場合、「トドス」(または他の何か)である可能性があります。
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);
}
マシン上の「Everyone」グループにフルコントロールを与える必要があります。見つかった this MSDNの投稿で、それについて説明しています。
これがあなたのために働くことを願っています。