У меня есть то, что в Руководствах по разработке UAC называется «Приложение административного выбора». Если вы знакомы с тем, что это такое, пропустите следующий раздел.
Справочная информация:
Я хочу, чтобы «Стандартный» пользователь имел возможность выбрать / отменить выбор параметра «Запуск при запуске» в настройках моего приложения.
Поскольку мое приложение предназначено для каждого компьютера (а не для пользователя), должно произойти следующее: необходимо либо удалить, либо скопировать файл ярлыка в папку «Пуск» / «Программы» / «Автозагрузка», для выполнения которой требуется административный доступ.
Итак, я хотел бы, чтобы появилось «приглашение для ввода учетных данных контроля учетных записей», и таким образом, если у пользователя есть учетная запись администратора, они также могут ввести учетные данные. Очевидно, именно так должны разрабатываться приложения, чтобы пользователю не приходилось переключаться на другую учетную запись каждый раз, когда ему нужно что-то сделать административным.
Выдержка из документации MSDN:
Приложение административного выбора
Повышенный процесс или COM-объект
Первоначальное приложение запускается без повышения прав. Те элементы в пользовательском интерфейсе, для которых требуется токен доступа администратора, отмечены значком щита в качестве идентификации. Это украшение указывает пользователю, что использование этой функции потребует одобрения администратора. Когда приложение обнаруживает, что была выбрана одна из этих кнопок, оно имеет следующие два варианта:
- Приложение запускает вторую программу, используя ShellExecute () для выполнения административной задачи. Эта вторая программа будет помечена требуемым уровнем выполнения уровня RequAdministrator, в результате чего у пользователя будет запрошено подтверждение. Эта вторая программа будет работать с маркером полного административного доступа и сможет выполнить желаемую задачу.
-ИЛИ-
- Приложение запускает COM-объект с помощью CreateElevatedComObject (). Этот API будет запускать COM-объект с маркером полного административного доступа после утверждения, и этот COM-объект сможет выполнить нужную задачу.
Мне просто нужно скопировать файл ... кажется чрезмерным, чтобы создать новый процесс с помощью ShellExecute (), и я не знаю достаточно о COM, чтобы знать, могу ли я использовать его для копирования файла. Я надеюсь, что кто-то может опубликовать некоторый код, который предоставляет способ скопировать файл и в идеале также объяснить, как украсить элемент MenuItem с помощью «декоратора оболочки».
Примечания:
Я ознакомился с демонстрацией UAC, предоставленной Microsoft , на которую ссылаются в нескольких сообщениях StackOverflow, таких как ( Запросить повышение прав Windows UAC, если путь защищен? ) по темам, связанным с разрешения. В коде есть только пример вызова отдельного процесса.