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

StackOverflow https://stackoverflow.com/questions/17533

Вопрос

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

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

Это было полезно?

Решение

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

Однако, поскольку @ДэнниСмурф правильно подмечает вы можете повысить только COM-объект или отдельный процесс.

В рамках Windows SDK Cross Technology Samples есть демонстрационное приложение под названием Демо-версия ОАК.В этом демонстрационном приложении показан метод выполнения действий с процессом с повышенными правами.Он также демонстрирует, как узнать, является ли пользователь в настоящее время администратором.

Другие советы

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

  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.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top