3

C# アプリケーションを開発しています。

フォルダーの ACL を変更する必要があります。そのためには、昇格した管理者としてプログラムを実行していますが、すべて正常に動作します。

問題は、フォルダーを所有するユーザーがシステムから削除された場合、フォルダーの所有権を取得しようとすると、無許可の例外が発生することです。

これは失敗するコードです:

 using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
            {
                var directorySecurity = directoryInfo.GetAccessControl();
                directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
                Directory.SetAccessControl(directoryInfo.FullName, directorySecurity);
            }

次の行で例外が発生します: directoryInfo.GetAccessControl();

PrivilegeEnabler はProcess Privilegesで定義されたクラスであり、ファイルの所有権を取得するために使用されます。

4

1 に答える 1

3

解決策を見つけました。

(GetAccessControl を呼び出さずに) 新しいアクセス制御を作成し、現在のプロセスに所有者を設定して、所有者を設定する必要があります。その後、そのファイルで好きなことを行うことができます。

using (new PrivilegeEnabler(Process.GetCurrentProcess(), Privilege.TakeOwnership))
            {
                //create empty directory security
                var directorySecurity = new DirectorySecurity();
                //set the directory owner to current user
                directorySecurity.SetOwner(WindowsIdentity.GetCurrent().User);
                //set the access control
                Directory.SetAccessControl(directoryInfo.FullName, directorySecurity);
            }
于 2012-07-15T13:32:05.800 に答える