У нас есть комплект программ, которые проверяют на новые версии при запуске и затем загружают новые версии для выполнения при необходимости. Это - очевидно, проблема в Windows 7, когда он заблокирован вниз как 'типичный пользователь', поскольку они не могут записать в c:\program files directory and below. Кто-либо замеченный пример приложения, которое двигается с проблемой?
Наши приложения записаны в Delphi, но пример на любом языке был бы полезен.
Заранее спасибо
Обновление:
У нас уже есть система для determing, существует ли новая версия, единственной проблемой является загрузка и установка (при необходимости), поскольку это требует повышения. Я не могу думать о пути, который не требует, чтобы подсказка повышения или наши пользователи уменьшила их настройки безопасности.
Обновление 2:
Я задал последующий вопрос, вместо того, чтобы добавить новый здесь
Существует два варианта установки приложения:
Объявление 2: Google Chrome делает это. Он устанавливает .exe здесь:
%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe
--jeroen
Обычно вы увидите, что приложение делает, если ему нужно повысить разрешения, примерно так.
Это довольно распространенный сценарий , тем более что для обновления вашей собственной DLL вам все равно нужно перейти к вторичному процессу.
Или вы можете сделать так, чтобы пользователь запускал приложение для запуска.
Вам нужно иметь отдельный исполняемый файл для работы обновления. У программы обновления должен быть манифест, который отмечает ее как требующую повышения уровня.
Ваше приложение может проверить, доступна ли новая версия на удаленном сервере. Если это так, то он может загружать файлы обновлений в одну из пользовательских папок, например, временную папку пользователя. Получить адрес таких специальных папок можно с помощью функции API SHGetSpecialFolder .
После завершения загрузки вы можете открыть диалоговое окно, сообщающее пользователю, что вы готовы к обновлению. Если пользователь согласен с обновлением, вы можете запустить процесс обновления с повышенными привилегиями (как администратор), и процесс обновления может заменить существующие файлы в вашем пути установки на файлы, уже загруженные в папку Temp пользователя. Чтобы запустить программу обновления от имени администратора, вы можете использовать ShellExecute :
ShellExecute(0,'runas','notepad.exe',nil,nil,SW_SHOWNORMAL);
По завершении обновления процесс обновления может перезапустить ваше приложение.
Если ваш установщик запускался не от имени администратора - вам не нужны дополнительные права для установки обновления.
Если ваш установщик был запущен под администратором - тогда он может создать задачу в Task Sheduler. Скажем, запускайте эту задачу один раз в неделю под этой учетной записью (admin) и с наивысшими привилегиями. Задача будет вашим апдейтером. Простой.
Если ваше приложение использует MSI (установщик Windows) в качестве установщика, то исправление контроля учетных записей пользователей , при правильной настройке, может позволить вам устанавливать обновления без высота.
Вот несколько советов, которые помогут вам обойти проблемы с обновлением:
Наша компания продает программное обеспечение, специально предназначенное для автоматического обновления Windows 7 UAC (вы можете посетить AutoUpdate +, щелкнув здесь: текст ссылки ). Лучшие причины для использования стороннего решения - любого решения - заключаются в том, что у вас будет больше гибкости с вашими обновлениями, а также избежать привередливых проблем с поддержкой различных выпусков Windows.