アプリを使用してシステムボリュームにアクセスしようとするとDirectory.GetDirectories(systemVolumePath)
、UnauthorizedAccessExceptionがスローされます。罰金。私はここで使用するすべての答えを見てきましたtry catch
-これは私が求めているものではありません。
すべてのフォルダにアクセスするのに十分な権限を持つアカウントでアプリケーションを実行するにはどうすればよいですか?
ありがとう
runas.exe ツールを使用してこれを行うことに成功しました。
runas.exe /savecred /user:yourusernamehere my_app_that_needs_permissions.exe
これにより、現在のデスクトップ環境でアプリケーションが実行されますが、他のユーザーのプロファイルと権限が使用されるため、ファイル アクセス (ファイルの作成を含む) はそのユーザーの資格情報で行われます。
これの興味深い副作用は、アプリケーションによって作成されたファイルが所有者として他のユーザーとして作成され、現在のユーザーがそれらにアクセスするために必要な権限を持っていない可能性があることです。
世界のマルチユーザー環境を少し楽しく散策できます。
独自のコードからこれを行う方法を探している場合は、これらの SO 投稿でカバーされているようです。
私の知る限り、セキュリティを「回避」することはできません。あなたができることは、権限を要求することです。
必要なアクセス許可でコードを実行できるようにするには、ユーザーからの昇格を要求する必要があります。
.NET では、宣言構文または命令構文を使用してこれを行うことができます。
1 つのフォルダーへのアクセス許可を要求する命令構文を使用した Microsoft の例を次に示します。
FileIOPermission permFileIO =
new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\\Temp");
try
{
// Demand the permission to access the C:\Temp folder.
permFileIO.Demand();
resultText.Append("The demand for permission to access the C:\\Temp folder succeeded.\n\n");
}
catch (SecurityException se)
{
resultText.Append("The demand for permission to access the C:\\Temp folder failed.\nException message: ");
resultText.Append(se.Message);
resultText.Append("\n\n");
}
これらのディレクトリにアクセスするには、LocalSystem アカウントで実行する必要がありますが、これは軽視すべきものではありません。
PSExecは、使用シナリオに適している場合、必要なものを達成するのに役立ちます。