web-dev-qa-db-ja.com

すべてのユーザーに対して、アプリケーションによって作成されたファイルに完全な許可を与える方法は?

私が開発するツールは、それによって作成されたファイルにアクセス権「フルコントロール」を付与する必要があります。すべての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に注意してください(リンクの最後に記載されています)。将来のアカウントにも特権を付与します。

64
nawfal

これを使用している人々に注意してください。

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);
}
112
Angelo Vargas

マシン上の「Everyone」グループにフルコントロールを与える必要があります。見つかった this MSDNの投稿で、それについて説明しています。

これがあなたのために働くことを願っています。

12
Amar Palsapure