Как я могу скопировать файл как «Стандартный пользователь» в Vista (то есть «Приложение административного выбора»), предложив пользователю ввести учетные данные администратора? - PullRequest
5 голосов
/ 24 июня 2009

У меня есть то, что в Руководствах по разработке UAC называется «Приложение административного выбора». Если вы знакомы с тем, что это такое, пропустите следующий раздел.

Справочная информация:

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

Поскольку мое приложение предназначено для каждого компьютера (а не для пользователя), должно произойти следующее: необходимо либо удалить, либо скопировать файл ярлыка в папку «Пуск» / «Программы» / «Автозагрузка», для выполнения которой требуется административный доступ.

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

Выдержка из документации MSDN:

Приложение административного выбора

Повышенный процесс или COM-объект

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

  • Приложение запускает вторую программу, используя ShellExecute () для выполнения административной задачи. Эта вторая программа будет помечена требуемым уровнем выполнения уровня RequAdministrator, в результате чего у пользователя будет запрошено подтверждение. Эта вторая программа будет работать с маркером полного административного доступа и сможет выполнить желаемую задачу. -ИЛИ-
  • Приложение запускает COM-объект с помощью CreateElevatedComObject (). Этот API будет запускать COM-объект с маркером полного административного доступа после утверждения, и этот COM-объект сможет выполнить нужную задачу.

Мне просто нужно скопировать файл ... кажется чрезмерным, чтобы создать новый процесс с помощью ShellExecute (), и я не знаю достаточно о COM, чтобы знать, могу ли я использовать его для копирования файла. Я надеюсь, что кто-то может опубликовать некоторый код, который предоставляет способ скопировать файл и в идеале также объяснить, как украсить элемент MenuItem с помощью «декоратора оболочки».

Примечания:

Я ознакомился с демонстрацией UAC, предоставленной Microsoft , на которую ссылаются в нескольких сообщениях StackOverflow, таких как ( Запросить повышение прав Windows UAC, если путь защищен? ) по темам, связанным с разрешения. В коде есть только пример вызова отдельного процесса.

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

В итоге я пошел в другом направлении. Мой установщик создал ярлык запуска в папке «Все пользователи / автозагрузка», который передает аргумент приложению «запуск».

Когда приложение запускалось, я проверял наличие arg [0] .equals («запуск»), а затем проверял, есть ли Settings1.Default.RunOnStartup == true.

Если бы оба условия были выполнены, я бы немедленно покинул приложение. Когда приложение запускается без этого аргумента (то есть группы программ меню «Пуск»), приложение загружается нормально.

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

2 голосов
/ 01 июля 2009

Несмотря на то, что по-прежнему требуется хотя бы перезапуск или запуск процесса, вы можете найти некоторую помощь здесь: Щит UAC для возвышения на CodeProject.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...