アプリケーションで作成したファイルに対して、全ユーザーのフルパーミッションを与えるには?
2023-10-07 15:17:54
質問
私が開発するツールは、そのツールで作成されたファイルにアクセス権 "Full Control" を付与する必要があります。それは、すべての 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);
しかし、すべてのユーザーにそれを許可するにはどうしたらよいでしょうか?そして、将来の可能性のあるアカウントにも?後者が不可能な場合、最初の要件についてはどうすればよいのでしょうか?
ありがとうございます。
EDITです。
これは、私のために動作したコードです。回答者のリンクから引用しています。
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);
}
この
PropagationFlags.NoPropagateInherit
が必要であることに注意してください (リンク先の最後の方に書いてあります)。これは、将来のアカウントにも権限を与えるものです。
どのように解決するのですか?
これを使う人への注意
にリテラル文字列を使用する場合
FileSystemAccessRule
を使用する場合は、以下のようになります。
WellKnownSidType.WorldSid
ではなく
"everyone"
.
理由は、Windowの言語は複数あり、EveryoneはEN言語のものにのみ適用されるため、スペイン語の場合、"Todos"(または他のもの)となる可能性があるからです。
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);
}
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み】IIS/ASP.NETのすべてのユーザーアカウントとその違いについて教えてください。
-
[解決済み] build.sh ファイルのパーミッションが拒否されました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み】Microsoft.Extensions.LoggingからILoggerを解決することができない
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない