0

フォルダーのアクセス許可の保存に少し問題があります。それらを書いたり読んだりすることに関するいくつかのドキュメントを見つけることができました。私がやろうとしているのは、特定のユーザーのフォルダーのアクセス許可を読み取る>それを保存する>アクセス許可を変更する>インストーラープログラムが終了した後、アクセス許可を元に戻すことです。

元のフォルダーのアクセス許可を保存して元に戻す方法を除いて、すべてをダウンさせました(他の多くのコードによるもののみ)。ソフトウェアでいくつかの致命的なエラーが発生しましたが、これはそれらの多くを解決するための 1 つのステップです。すべてのヘルプは大歓迎です。

以下は、パーミッションの設定方法の例です。はい、全員が揃っていることはわかっていますが、今はテスト用です

 public void setPermDir()
    {
        try
        {
            string DirectoryName = "C:\\Temp1\\";

            Console.WriteLine("Adding access control entry for " + DirectoryName);

            // Add the access control entry to the directory.
            AddDirectorySecurity(DirectoryName, @"Everyone", FileSystemRights.FullControl, AccessControlType.Allow);


            Console.WriteLine("Done.");
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        Console.ReadLine();
    }

    // Adds an ACL entry on the specified directory for the specified account.
    public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
    {
        // Create a new DirectoryInfo object.
        DirectoryInfo dInfo = new DirectoryInfo(FileName);

        // Get a DirectorySecurity object that represents the 
        // current security settings.
        DirectorySecurity dSecurity = dInfo.GetAccessControl();

        // Add the FileSystemAccessRule to the security settings. 
        dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                        Rights,
                                                        ControlType));

        // Set the new access settings.
        dInfo.SetAccessControl(dSecurity);

    }
4

1 に答える 1

0

AddDirectorySecurity から DirectorySecurity dSecurity を返す場合はDirectory.SetAccessControl(directoryName, dSecurity);、アクセス ルールの変更が完了したら呼び出すことができます。

アップデート

SetAccessControl だけが機能しない場合、次のステップは、付与したアクセス許可をFileSystemSecurity.RemoveAccessRuleを使用して明示的に削除することです。

作成した FileSystemAccessRule への参照を保持するだけです。

FileSystemAccessRule toRemoveWhenDone = new FileSystemAccessRule(Account, Rights, ControlType);
于 2010-11-28T19:27:59.850 に答える