2008-08-20 3 views
25

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

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

ответ

25

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

Однако, как @DannySmurfcorrectly points out вы можете поднимать только объект COM или отдельный процесс.

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

16

запрашивающей высота среднего исполнение требует, чтобы вы либо:

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

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

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

+7

Обратите внимание, что это не является ограничением .NET - это общее ограничение системы контроля учетных записей. – 2010-08-29 19:40:54

+4

Обратите внимание, что это не ограничение UAC - это общее ограничение модели безопасности в Windows NT (работающий процесс не может изменить маркер безопасности). – 2011-06-22 00:42:02

+1

Обратите внимание, что это хорошо - иначе злоумышленник может вводить код в процесс предварительной подготовки, и этот код будет повышен вместе с этим процессом. – ghord 2012-11-04 21:00:09

1

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

-1

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

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

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

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

-1

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

Смежные вопросы