У меня есть то, что руководства по развитию UAC называют «административным выбором приложения». Если вы знакомы с тем, что это означает переход к следующему разделу.Как я могу скопировать файл в качестве «стандартного пользователя» в Vista (т.е. «приложение административного выбора»), предложив пользователю ввести учетные данные администратора?
фон:
Я хочу, чтобы «стандартный» пользователь имеет возможность выбрать/отменить выбор Run On варианта запуска в настройках для моего приложения.
Поскольку мое приложение предназначено для каждого компьютера (не для пользователя), ему необходимо либо удалить, либо скопировать файл ярлыка в папку «Пуск»/«Программы»/«Автозагрузка», для чего потребуется административный доступ для выполнения этой операции ,
Так что я хочу, чтобы появилось приглашение учетной записи управления учетными записями пользователей, и если у пользователя есть учетная запись администратора, они также могут ввести учетные данные. По-видимому, предполагается, что приложения должны разрабатываться таким образом, чтобы пользователь не переключался на другую учетную запись каждый раз, когда им нужно было что-то делать административно.
Выписка из MSDN документации:
Административный Выбор Применение
возвышенном процесса или COM-объект
Начальное приложение запускается без необходимости возвышения. Те элементы в пользовательском интерфейсе, для которых требуется токен доступа администратора, украшены значком экрана в качестве идентификатора. Это украшение указывает пользователю, что использование этой функции потребует одобрения администратора. Когда приложение обнаруживает, что одна из этих кнопок выбрана, она имеет следующие два варианта.
- Приложение запускает вторую программу с использованием ShellExecute() для выполнения административной задачи. Эта вторая программа будет отмечена запросом ExecutionLevel requireAdministrator, в результате чего пользователю будет предложено получить одобрение. Эта вторая программа будет работать с полным токеном доступа к администратору и сможет выполнить желаемую задачу. -OR-
- Приложение запускает COM-объект, используя CreateElevatedComObject(). Этот API запустит COM-объект с полным маркером доступа к администратору после утверждения, и этот COM-объект сможет выполнить желаемую задачу.
Мне просто нужно скопировать файл ... кажется чрезмерным, чтобы развернуть новый процесс с помощью ShellExecute(), и я не знаю достаточно о COM, чтобы узнать, могу ли я использовать его для копирования файла. Я надеюсь, что кто-то может опубликовать некоторый код, который предоставляет способ скопировать файл и в идеале также объяснить, как украсить MenuItem с помощью «sheild decorator».
Примечания:
Я посмотрел на UAC Demo provided by microsoft, который ссылается на несколько сообщений, таких как StackOverflow (Request Windows Vista UAC elevation if path is protected?) на темы, связанные с разрешениями. Код имеет только пример вызова отдельного процесса.
Это начало. Благодаря! – blak3r