2009-06-24 1 views
5

У меня есть то, что руководства по развитию 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?) на темы, связанные с разрешениями. Код имеет только пример вызова отдельного процесса.

ответ

2

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

Когда приложение запустилось, я проверил бы существование arg [0] .equals ("startup"), а затем проверьте, установлено ли Settings1.Default.RunOnStartup == true.

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

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

2

Хотя она по-прежнему, как представляется, связаны, по крайней мере перезагрузки или порождении процесса, вы можете найти помощь здесь: UAC Shield for Elevation на codeproject.com

+0

Это начало. Благодаря! – blak3r

Смежные вопросы