Автоматическое обновление программы и Windows 7

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

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

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

Обновление:

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

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

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

8
задан Community 23 May 2017 в 12:03
поделиться

8 ответов

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

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

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

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

--jeroen

7
ответ дан 5 December 2019 в 08:23
поделиться

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

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

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

6
ответ дан 5 December 2019 в 08:23
поделиться

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

  1. Приложение использует папку LOCALAPPPATH \ для хранения кэша основного приложения.
  2. Программа запуска проверяет, есть ли в Интернете более новая версия файла (ов), чем кэшированный файл.
  3. Launcher запускает кешированное приложение в LOCALAPPPATH
1
ответ дан 5 December 2019 в 08:23
поделиться

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

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

1
ответ дан 5 December 2019 в 08:23
поделиться

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

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

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

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

1
ответ дан 5 December 2019 в 08:23
поделиться
  1. Если ваш установщик запускался не от имени администратора - вам не нужны дополнительные права для установки обновления.

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

0
ответ дан 5 December 2019 в 08:23
поделиться

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

1
ответ дан 5 December 2019 в 08:23
поделиться

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

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

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

3
ответ дан 5 December 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: