Проблема :
Мне нужно проверить, есть ли у пользователя (локальный пользователь или пользователь домена, любой из них возможен) доступ на запись в файл (если вам интересно, %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.
У меня нет креативных решений для этого. Кто-нибудь может помочь?