Автоматическое обновление программы и Windows 7 - PullRequest
8 голосов
/ 05 марта 2010

У нас есть набор программ, которые проверяют наличие новых версий при запуске, а затем загружают новые версии для запуска при необходимости. Это, очевидно, проблема в Windows 7, когда он заблокирован как «обычный пользователь», так как они не могут записывать в каталог c: \ program files и ниже. Кто-нибудь видел пример приложения, которое справляется с проблемой?

Наши приложения написаны на Delphi, но пример на любом языке был бы полезен.

Заранее спасибо

Обновление:

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

Обновление 2:

Я задал следующий вопрос , вместо того, чтобы добавить новый здесь

Ответы [ 8 ]

7 голосов
/ 06 марта 2010

Существует два варианта установки приложения:

  1. Приложение доступно для всех пользователей : для установки или обновления требуется повышение прав для Windows Vista и выше
  2. Приложение доступно для одного пользователя : установить или обновить приложение в профиле пользователя в % LOCALAPPDATA% , повышение прав не требуется

Объявление 2: Google Chrome делает это. Он устанавливает .exe здесь:

% LOCALAPPDATA% \ Google \ Chrome \ Application \ chrome.exe

- Йерун

6 голосов
/ 05 марта 2010

Обычно то, что вы будете делать в приложении, если ему необходимо повысить разрешения, выглядит примерно так:

  1. Приложение определяет необходимость обновления
  2. Приложение запускает службу «обновления», для которой требуются разрешения «Администратор»
  3. Приложение обновляется с этим обновленным
  4. Приложение перезапускается

Это довольно распространенный сценарий, тем более что для обновления вашей собственной DLL вам все равно нужно перейти на дополнительный процесс.

3 голосов
/ 14 июня 2010

Вот несколько советов, которые помогут вам решить проблемы с обновлением:

  1. Если ваш файл имеет имя «update.exe» или «install.exe», он автоматически вызовет запрос на повышение прав UAC. Это простой способ заставить существующее программное обеспечение обходить разрешения Windows Vista / 7.
  2. Не рекомендуется управлять процессом проверки обновлений и обновлений из своего приложения. Проблема в том, что ваше приложение может блокировать файлы и нуждается в обновлении. Внешние приложения должны управлять вашими обновлениями.
  3. Самое простое решение для обновления - выполнить HTTP-вызов, который проверяет текущий номер версии продукта, а затем, при необходимости, загрузить двоичный файл установщика. Это не даст вам гибкости в обновлении, но это быстрое и простое решение.

Наша компания продает программное обеспечение, специально предназначенное для автоматического обновления в Windows 7 UAC (вы можете посетить AutoUpdate +, нажав здесь: текст ссылки ). Наилучшие причины для использования стороннего решения - любого решения - это то, что вы будете более гибкими в своих обновлениях, а также избежите сложнейших проблем с поддержкой различных выпусков Windows.

1 голос
/ 14 июня 2010

Если ваше приложение использует MSI (установщик Windows) для своей программы установки, тогда Исправление контроля учетных записей пользователей , если оно правильно настроено, может позволить вам устанавливать обновления без повышения прав.

1 голос
/ 06 марта 2010

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

См .: http://msdn.microsoft.com/en-us/library/bb756929.aspx

1 голос
/ 05 марта 2010

Ваше приложение может проверить, доступна ли новая версия на удаленном сервере. Если это так, то он может загружать файлы обновлений в одну из пользовательских папок, например, временную папку пользователя. Вы можете получить адрес таких специальных папок, используя функцию SHGetSpecialFolder API.

После завершения загрузки вы можете открыть диалоговое окно, сообщающее пользователю, что вы готовы к обновлению. Если пользователь согласен с обновлением, вы можете запустить процесс обновления с повышенными привилегиями (как администратор), и процесс обновления может заменить существующие файлы в вашем пути установки на файлы, уже загруженные в папку пользователя Temp. Чтобы запустить программу обновления от имени администратора, вы можете использовать ShellExecute :

ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL);

Когда обновление будет завершено, процесс обновления может перезапустить ваше приложение.

1 голос
/ 05 марта 2010

Или вы можете сделать так, чтобы пользователь запускал приложение запуска.

  1. Приложение использует папку LOCALAPPPATH \ для хранения кэша основного приложения.
  2. Проверки запускачтобы увидеть, есть ли в интернете более новая версия файла (ов), чем в кэшированном файле.
  3. Launcher запускает кэшированное приложение в LOCALAPPPATH
0 голосов
/ 15 июня 2010
  1. Если ваш установщик не был запущен с правами администратора - вам не нужны дополнительные права для установки обновления.

  2. Если ваш установщик был запущен с правами администратора - он может создать задачу в Task Sheduler. Скажем, запускайте эту задачу раз в неделю, под этой учетной записью (admin) и с самыми высокими привилегиями. Задача будет вашим обновлением. Простой.

...