C #: проверьте, имеет ли администратор доступ для записи в файл - PullRequest
0 голосов
/ 09 января 2011

Проблема : Мне нужно проверить, есть ли у пользователя (локальный пользователь или пользователь домена, любой из них возможен) доступ на запись в файл (если вам интересно, %windir%\system32\inetsrv\config\applicationHost.config. Этот файл защищен Windows, и вам нужно быть администратором, чтобы пиши в него.)

Мое решение : Общая конструкция:

using (Impersonator impersonator = new Impersonator(domain, username, password))
{
 try
 {
  using (FileStream fs = File.OpenWrite(appHostConfigPath))
    {
     return true;
    }
  catch
  {
     return false;
  }
 }

Как вы можете себе представить, класс Impersonator является IDisposible, который использует встроенное взаимодействие для вызова LogonUser. Ничего особенного, и это работает.

Где я застрял: В ОС Windows с включенным UAC эта функция всегда возвращает false, даже если пользователь, указанный в username , является администратором. Несмотря на то, что моя программа работает с повышенными правами администратора, я подозреваю, что происходит, что олицетворенный код работает как администратор с ограниченными правами. Следовательно, метод возвращает false.

У меня нет креативных решений для этого. Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Как насчет GetFileSecurity и GetEffectiveRightsFromAcl ?

Вторая ссылка содержит пример, который на самом деле довольно полный (на C ++).

0 голосов
/ 09 января 2011

Не могли бы вы посмотреть на исключение?Это с разрешениями или «Файл не найден исключение»?Потому что в Windows 7 он находится на

% windir% \ System32 \ inetsrv \ config \ applicationHost.config

может также совпадать с Windows Vista.

...