1

C# で所有権を取得してファイルの ACL を変更しようとしていますが、管理者としても例外が発生します。

System.UnauthorizedAccessException: Attempted to perform an unauthorized operation.

プログラムを実行しているユーザーは、Windows インターフェイスを介して所有権を取得し、アクセス許可を変更することができます。

私のコード:

string fileName = @"C:\temp\mount\Windows\System32\Boot\en-US\winload.exe.mui";
FileSecurity fileSec = File.GetAccessControl(fileName);

fileSec.SetOwner(WindowsIdentity.GetCurrent().User); 
File.SetAccessControl(fileName, fileSec); //exception thrown here

現在のユーザーが管理者グループのメンバーであることを確認するチェックも追加しました。

WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);

bool isAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator); //returns true

背景情報: WinPE イメージを作成しており、winload.exe.mui ファイルを置き換える必要があります。

また、このファイルの現在のアクセス許可では、「信頼できるインストーラー」へのフル アクセスのみが許可されます。

Windows 7で実行しています

4

2 に答える 2

0

File.SetAccessControl()の代わりに、新しいメソッドで引き続き使用できますFileStream.SetAccessControl()。私もそれがうまくいくと確信しています。MSDN は実際にこの方法を推奨しています。

「FileStream クラスと SetAccessControl は既存のファイルで使用できますが、使いやすい File.SetAccessControl メソッドの使用を検討してください。」

http://msdn.microsoft.com/en-us/library/system.io.filestream.setaccesscontrol.aspx[^]

于 2014-02-02T14:17:48.033 に答える