Запросить повышение прав Windows Vista UAC, если путь защищен?

Для моего приложения C # я не хочу всегда запрашивать повышение прав при запуске приложения, но если они выбирают выходной путь, защищенный UAC, мне нужно запросить повышение прав.

Итак, как мне проверить, защищен ли путь UAC, а затем как мне запросить повышение прав в середине выполнения?


person sieben    schedule 20.08.2008    source источник


Ответы (6)


Лучший способ определить, не могут ли они выполнить действие, - это попытаться выполнить его и поймать UnauthorizedAccessException.

Однако как @ DannySmurf правильно указывает, что вы можете повысить уровень только COM-объекта или отдельного процесса.

В образцах кросс-технологий Windows SDK есть демонстрационное приложение под названием Демонстрация UAC. Это демонстрационное приложение демонстрирует способ выполнения действий с процессом с повышенными правами. Он также демонстрирует, как узнать, является ли пользователь в настоящее время администратором.

person Adrian Clark    schedule 18.09.2008
comment
Хорошая ссылка на демо UAC, именно то, что мне нужно. Большое спасибо. Хотел бы я иногда давать больше повторений! - person Ryan; 20.11.2008
comment
@Ryan Пожалуйста. Я немного разочарован тем, насколько сложным кажется UAC в управляемой среде. Не стесняйтесь просматривать мой профиль пользователя и голосовать за другие мои вопросы! :) - person Adrian Clark; 21.11.2008
comment
Кстати, имя исключения - UnauthorizedAccessException с z в Unauthorized. Только то ;) - person Tute; 27.10.2009

Запрос на повышение в середине выполнения требует, чтобы вы:

  1. Используйте COM-элемент управления с повышенными правами, который выведет запрос
  2. Запустите второй процесс, который с самого начала повышен.

В .NET в настоящее время нет возможности повысить уровень запущенного процесса; вы должны выполнить одно из описанных выше хакерских действий, но все, что это делает, - это дает пользователю видимость того, что текущий процесс повышается.

Единственный способ, который я могу придумать, чтобы проверить, повышен ли путь UAC, - это попытаться выполнить какую-то тривиальную запись в него, пока вы находитесь в не повышенном состоянии, перехватить исключение, повысить и повторить попытку.

person TheSmurf    schedule 20.08.2008
comment
Обратите внимание, что это не ограничение .NET - это общее ограничение системы контроля учетных записей пользователей. - person Billy ONeal; 29.08.2010
comment
Обратите внимание, что это не ограничение UAC - это общее ограничение модели безопасности в Windows NT (запущенный процесс не может изменить свой маркер безопасности). - person Ian Boyd; 22.06.2011
comment
Обратите внимание, что это хорошо - в противном случае злоумышленник может внедрить код в процесс предварительного повышения прав, и этот код будет повышен вместе с этим процессом. - person ghord; 05.11.2012

Я не уверен, что это поможет вам, но вы можете взглянуть на это сообщение в блоге:

http://haishibai.blogspot.com/2010/01/tiy-try-out-windows-7-uac-using-c-part_26.html

person mosu    schedule 05.05.2010

Вы можете уведомить пользователя о том, что путь защищен, и попросить его вывести файл в «более безопасную» область. Таким образом, вашему приложению не потребуется повышение прав. Я уверен, что это зависит от ваших пользователей и от того, что вы пытаетесь сделать, однако я не думаю, что это слишком, чтобы любезно сообщить пользователю, что вы не чувствуете себя хорошо, сбрасывая xyz в папку Windows / System32.

person Brian Leahy    schedule 20.08.2008

Если у вашего вторичного диска есть собственные права доступа к файлам, например, у вас установлена ​​другая копия Windows. Это подскажет.

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

Если вы выполняете цикл FolderBrowserDialog, обязательно сообщите пользователю, почему, чтобы он не злился на ваше приложение.

Примечание: это действительно воняет, что нет способа .net запросить разрешение, возможно, p / вызвать win32 api ...?

person Brian Leahy    schedule 20.08.2008
comment
P / Invoking ничего не изменит; правила для UAC одинаковы, независимо от того, управляемый вы или собственный. Это COM, внешний процесс или крах. - person Chris Charabaruk; 22.08.2009

UAC может повышать объект на основе их GUID, это (теоретически) означает, что любой класс с GUID может быть повышен, UACDemo также должен показать, как это сделать.

person Tristan    schedule 30.11.2009