Запросить повышение уровня контроля учетных записей Windows Vista, если путь защищен?
Для моего приложения на C# я не хочу всегда запрашивать повышение прав при запуске приложения, но если они выбирают выходной путь, защищенный UAC, мне нужно запросить повышение прав.
Итак, как я могу проверить, защищен ли путь UAC, а затем как запросить повышение уровня выполнения в середине?
6 ответов
Лучший способ определить, не в состоянии ли они выполнить какое-либо действие, - это попытаться и поймать UnauthorizedAccessException
,
Однако, как правильно указывает @ DannySmurf , вы можете поднять только COM-объект или отдельный процесс.
В примерах кросс-технологии Windows SDK есть демонстрационное приложение под названием UAC Demo. В этом демонстрационном приложении показан метод выполнения действий с повышенными правами. Также показано, как узнать, является ли пользователь администратором.
Для запроса срединного выполнения возвышения необходимо, чтобы вы:
- Используйте элемент управления COM, который повышен, который будет выдавать приглашение
- Запустите второй процесс, который повышен с самого начала.
В.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...?