Самообновляющееся приложение и UAC - оптимальная реализация - PullRequest
1 голос
/ 17 октября 2011

Я ищу несколько советов, чтобы сделать самообновляющееся приложение UAC-совместимым. У меня есть приложение, которое проверяет наличие обновлений при запуске, а затем автоматически загружает любые новые двоичные файлы и заменяет их новыми. Проблема заключается в том, что в Windows 7 любое приложение, которое записывает в папку Program Files, требует повышения прав администратора UAC. Мы добавили код в манифест приложения, чтобы автоматически запрашивать повышение прав UAC, чтобы обновления работали, но, естественно, это не оптимальное решение, поскольку пользователи увидят запрос администратора, если у пользователей включены запросы UAC. Какие у меня варианты, чтобы быть UAC-совместимым и при этом поддерживать свойства самообновления приложения?

Спасибо

Tom

Ответы [ 4 ]

3 голосов
/ 17 октября 2011

По сути, если вы хотите установить в Program Files, вам нужно будет показать приглашения UAC.

Конечно, вы можете изменить настройки контроля доступа (то есть то, что вы установили на странице безопасности Explorer.диалог свойств) для вашей папки установки, чтобы сделать ее доступной для записи.Но это было бы против всех известных лучших практик.Я бы не стал его поддерживать.

Один из вариантов - сделать то, что делает Chrome, и установить его под профилем пользователя.У этого подхода есть свои недостатки.Для этого необходимо, чтобы каждый пользователь на машине установил программное обеспечение, а затем каждый пользователь должен будет выполнить обновление по отдельности.Вы также теряете часть защиты, которую предоставляет UAC.

1 голос
/ 17 октября 2011

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

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

Самое сложное - запустить Firefox без повышенных прав после завершения обновления. Я бы не рекомендовал использовать трюки для запуска процесса без повышенных прав. Вы должны сохранить один процесс с обычным токеном безопасности пользователя. Я не знаю, как Firefox справляется с этим, но самый простой способ был бы: запустить средство обновления без повышения прав (отметьте его в манифесте asInvoker), затем средство обновления перезапустится с повышенными функциями ShellExecute и глаголом runas , По завершении процесса с повышенными правами запускается обновленное приложение.

1 голос
/ 17 октября 2011

В дополнение к тому, что сказал Дэвид, вы также можете установить фоновую службу, которая управляет обновлениями для вас. Служба будет получать запросы на обновление от вашего приложения и управлять записью файлов в каталог установки. С точки зрения пользователя, это было бы совершенно незаметно без запросов UAC (кроме одного, во время начальной установки).

0 голосов
/ 07 октября 2015

Мне очень нравится, как это делает Google.

Google теперь обновляет Chrome и другие его продукты, используя службу обновлений Google, работающую в качестве локальной системы. UAC срабатывает во время установки, а затем никогда больше. Приложения устанавливаются в Program Files, что устраняет двойную проблему использования AppData: во-первых, многие предприятия блокируют запуск исполняемых файлов из AppData; и, что более важно, каждый пользователь на одной машине должен был бы выполнить отдельную установку в AppData на этой машине.

Когда доступна новая версия, служба обновлений автоматически добавляет папку версий в базовый каталог (например, Program Files \ Google \ Chrome \ Application \ 45.0.2454.93, а затем позже, Program Files \ Google \ Chrome \ Application). \ 45.0.2454.101). Средство запуска Chrome просто запускает приложение Chrome из папки с самой высокой версией.

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