Запросить повышение уровня контроля учетных записей Windows Vista, если путь защищен?

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам