2

Vista コンピューターでフォルダーとそのすべての子のアクセス許可を設定しようとしています。私がこれまでに持っているコードはこれです。

 public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl, 
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None, 
                             AccessControlType.Allow));

            info.SetAccessControl(ds);            
        }

しかし、期待どおりに機能していません。
管理者としてコードを実行しても、アクセス許可は設定されません。

私が作業しているフォルダーは C:\ProgramData\<my folder> にあり、そのフォルダーの権利を手動で変更できます。

誰もが私を正しい方向に向けたいと思っています。

4

2 に答える 2

6

したがって、答えは 2 つあります。まず、フォルダーにアクセス許可が設定される前にサブフォルダーが作成されていたため、フォルダーとファイルの両方がアクセス許可を継承するようにするには、アクセス許可にもう 1 つのフラグを設定する必要がありました。

public static void SetPermissions(string dir)
        {
            DirectoryInfo info = new DirectoryInfo(dir);
            DirectorySecurity ds = info.GetAccessControl();            
            ds.AddAccessRule(new FileSystemAccessRule(@"BUILTIN\Users", 
                             FileSystemRights.FullControl,
                             InheritanceFlags.ObjectInherit |
                             InheritanceFlags.ContainerInherit,
                             PropagationFlags.None,
                             AccessControlType.Allow));
            info.SetAccessControl(ds);            
        }

その後、すべてが機能しているように見えます。

于 2008-10-28T20:43:00.953 に答える
1

ばかげた質問かもしれませんが、同じ操作を手動で (たとえば、エクスプローラーを使用して) 実行しようとしましたか? Vista には、Administrators グループのユーザーでさえ、追加の手順を実行しないと変更できないディレクトリがいくつかあります。最初に2つのステップを踏む必要があると思います。

まず、エクスプローラーを使用して、コードで行おうとしているのと同じ変更を行います。失敗した場合は、トラブルシューティングを行います。

次に、自分のユーザー フォルダーの下に作成したディレクトリでコードをテストします。そのために管理者特権は必要ありません。ログインしたアカウントは、たとえば c:\Users\yourname\documents の下のフォルダーの ACL を変更できる必要があります。

また、デバッガーでコードをステップ実行し、SetAccessControl を呼び出す直前の "ds" オブジェクトを確認します。それは、あなたを正しい道に導く予期せぬ何かを示すかもしれません。

于 2008-10-28T16:54:30.370 に答える