Как активировать UAC в коде c # при вызове метода? - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть метод, который изменяет или сохраняет файл на диске C: \ при его вызове, но если у пользователя нет доступа, он выдает исключение.

Как можно спросить пользователя с UAC, позволяет ли он методу вносить изменения в диск C: \ вместо исключения?

Ответы [ 3 ]

5 голосов
/ 14 ноября 2011

См. этот пост на SO.Чтобы сделать это проще, я публикую часть принятого решения.

Я не верю, что возможно улучшить текущий запущенный процесс.В Windows Vista / Seven встроено, что права администратора предоставляются процессу при запуске.
Если вы посмотрите на различные программы, использующие UAC, вы должны увидеть, что они фактически запускают отдельный процесс каждый раз, когда необходимо выполнить административное действие.выполнено (диспетчер задач - одно, Paint.NET - другое, последнее фактически является приложением .NET).

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

Вы можете указать, что новый процесс должен запускаться с повышенными правами, установив для свойства Verb объекта startInfo значение runas, как показано ниже:

startInfo.Verb = "runas";

Это приведет к тому, что Windows будет вести себя так, как будто процесс был запущен из Проводника с помощью команды меню «Запуск от имени администратора».

2 голосов
/ 14 ноября 2011

Как Марко говорит, что не может.

Вы также не можете отменить процесс с повышенными правами.

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

Хороший способ сделать это перенастроить ваш процесс как серию задач. Определите тех, кому требуется повышение прав, запустите «TaskProcessor», передайте ему задачи. Вызывающая программа затем проверяет, что они произошли, если так продолжается. Вы можете делать группировку, зависимости и т. Д. С этим, и это хорошо и многократно используется, если вы немного подумаете.

Кажется, что излишне убивать один файл.

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

Также, если вы поддерживаете предустановленные ОС, пользователи XP с ограниченными правами, службы терминалов и т. Д., Даже если UAC отключен в W7, вы все равно можете получить некоторые нелогичные действия.

1 голос
/ 14 ноября 2011

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

Другими словами, запустите диалоговое окно «Сохранить как» в области «Документы» и предоставьте им выбороттуда.Затем захватите исключение и покажите его пользователю об отсутствии привилегий для записи в эти специальные каталоги.

Я думаю, что пользователь предпочел бы знать, что вы не обходите встроенную защиту.Поверьте, я думаю, что мне больно, что IIS не позволяет мне открывать блокнот и редактировать файл в моем локальном каталоге inetpub, но в то же время я очень рад, что это останавливает меня.

...