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

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

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

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

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

В образцах Windows SDK Cross Technology есть демонстрационное приложение под названием 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.

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

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

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

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

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

Давайте будем гением компьютера.