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

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

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

20.08.2008 07:50:29
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

26
23.05.2017 10:29:40
Хорошая ссылка на демоверсию UAC, именно то, что мне нужно. Большое спасибо. Жаль, что я мог бы дать больше повторений иногда
Ryan 20.11.2008 00:08:28
@ Райан Не за что. Я немного расстроен тем, насколько сложно UAC кажется в управляемой среде. Не стесняйтесь просматривать мой профиль пользователя и отвечать на другие мои вопросы! :)
Adrian Clark 21.11.2008 03:55:29
Кстати, именем исключения является UnauthorizedAccessException с z в Unauthorized. Только это;)
Matías 27.10.2009 20:04:17

Чтобы запросить срединное выполнение высот, вам необходимо:

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

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

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

17
20.08.2008 07:56:07
Обратите внимание, что это не ограничение .NET - это общее ограничение системы контроля учетных записей.
Billy ONeal 29.08.2010 19:40:54
Обратите внимание, что это не ограничение UAC - это общее ограничение модели безопасности в Windows NT (запущенный процесс не может изменить свой токен безопасности).
Ian Boyd 22.06.2011 00:42:02
Обратите внимание, что это хорошо - в противном случае злоумышленник может внедрить код в процесс предварительного повышения прав, и этот код будет повышен вместе с этим процессом.
ghord 4.11.2012 21:00:09

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

1
20.08.2008 08:07:10

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

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

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

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

-1
20.08.2008 10:07:06
P / Invoking ничего не изменит; правила для UAC одинаковы, независимо от того, управляете ли вы или нативно. Это COM, внешний процесс или перебор.
Chris Charabaruk 22.08.2009 06:24:40

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

-1
30.11.2009 10:43:30

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

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

3
16.03.2011 23:18:40