Запросить повышение уровня контроля учетных записей Windows Vista, если путь защищен? - PullRequest
27 голосов
/ 20 августа 2008

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

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

Ответы [ 6 ]

26 голосов
/ 18 сентября 2008

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

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

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

16 голосов
/ 20 августа 2008

Для запроса высотного исполнения в середине выполнения необходимо, чтобы вы:

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

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

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

3 голосов
/ 05 мая 2010

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

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

1 голос
/ 20 августа 2008

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

0 голосов
/ 30 ноября 2009

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

0 голосов
/ 20 августа 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...