Проверьте, есть ли у моего приложения права на чтение информации о процессе и чтение / запись в файлы и каталоги - PullRequest
1 голос
/ 01 октября 2011

Как проверить в моем приложении C #, есть ли у меня разрешения на получение списка процессов, уничтожение процессов, получение каталогов, получение файлов в каталогах, чтение и запись файлов и т. Д.? Спасибо!

Ответы [ 2 ]

4 голосов
/ 01 октября 2011

Если у вас есть разрешение, вы можете выполнить операцию без проблем, если у вас нет разрешения, вы можете перехватить исключительную ситуацию и обработать ее (UnauthorizedAccessException и т. Д.).

2 голосов
/ 01 октября 2011

В .NET есть два способа сделать это.

Пространство имен System.Security.Permissions содержит необходимые атрибуты и классы. Вы можете использовать атрибуты и написать декларативный код или использовать классы с императивным кодом.

Например, для FileIO вы должны сделать это

Декларативный : Обычно вы аннотируете метод, и на основе SecurityAction генерируются исключения, если текущий или вызывающий код не имеет указанного разрешения

[FileIOPermissionAttribute(SecurityAction.PermitOnly, 
           ViewAndModify = "C:\\example\\sample.txt")]

Императив : Здесь вы можете программно проверить разрешения

FileIOPermission f = new FileIOPermission(PermissionState.None);
f.AllLocalFiles = FileIOPermissionAccess.Read;
try
{
  f.Demand();
}
catch (SecurityException s)
{
  Console.WriteLine(s.Message);
}

Обязательный или декларативный, ваш код должен реагировать на исключение. Перечисление SecurityAction объясняет, как они работают, некоторые проверяют, есть ли у текущего кода разрешение, другие также проверяют вызывающий код. Это перечисление имеет те же соответствующие методы (Deny, Assert и т. Д.), Которые можно использовать в императивном коде.

И наконец, Пространство имен System.Security.Permissions не имеет ничего для процессов, поэтому я предполагаю, что вы не можете на самом деле проверять разрешения здесь. Хотя это статья для .NET 1.1 , эта статья по безопасности довольно актуальна. (Не имеет цветной код, хотя = (

...