Как вы делаете установщик обновлений с NSIS?

в настоящее время у меня есть проект с установщиком, который я сделал с NSIS, но я хотел бы иметь обновление до новых версий, которые имеют только измененные файлы и покажут журнал изменений. Целевой платформой является Windows. Какие методы / предложения вы должны сделать для этого?

5 ответов


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

NSIS в основном программа, которая работает и делает то, что вы хотите, в то время как установщик типа установщика Windows заставляет вас разделить приложение на функции и компоненты, которые могут управляться службой msi установщика windows. MSI будет отслеживать например, какие версии продуктов вы установили, будет ли запуск установщика снова выполняться в режиме обслуживания, разрешено ли вам устанавливать 2 продукта разных версий, можно ли применить исправление к определенной версии продукта или любой другой вопрос, связанный с обновлениями и установками.

в основном большинство вещей, которые вы запрашиваете, будут доступны из коробки, Если вы перейдете на технологию установщика Windows. Тогда как если вы используете NSIS (который не использует технологию установщика Windows), то вам придется реализовать все это самостоятельно.

Так же, как пример, есть довольно полный конструктор установщика под названием AdvancedInstaller (http://www.advancedinstaller.com/) это звучит так, как вы хотите. В качестве альтернативы, если вы хотите провести остаток своей жизни, траля форумы и группы новостей, то есть продукт с открытым исходным кодом под названием WiX, который делает что-то подобное ;)


несмотря на мой предыдущий комментарий, я написал установщик 5000 строк с использованием NSIS с 13 пользовательскими страницами. Я даже посмотрел на исправление, и это немного Хак. Основной совет - убедиться, что вы исправляете версию, которую вы думаете, что исправляете, затем используйте один из доступных плагинов исправления.

существует несколько технологий исправления, которые сравнивают файлы и производят файлы изменений исправлений и код NSIS, необходимый для их" установки". Я обнаружил, что NSIS Patch Gen делал то, что хотел, с наименьшим количеством хлопот. Документация немного тонкая, но как только вы это поймете, вы подумаете "О да".

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

http://sourceforge.net/projects/nsispatchgen/


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

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


вы знакомы с cURL? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl

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

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

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

RMDir /r /REBOOTOK '$INSTDIR'
RMDir /r /REBOOTOK "$SMPROGRAMS$StartMenuFolder"
Delete '$SMPROGRAMS$StartMenuFolder\gpl3license.lnk'
Delete '$SMPROGRAMS$StartMenuFolder\readme.lnk'
Delete '$SMPROGRAMS$StartMenuFolder${PRODUCT_TITLE}.lnk'
DeleteRegKey HKCU "Software\Your major subkey${PRODUCT_NAME}"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall${PRODUCT_NAME}"
DeleteRegKey /ifempty HKCU "Software${PRODUCT_NAME}"

ИМЯ_ПРОДУКТА это !определить я сделано, потому что я использую эти файлы nsi как шаблон. это только часть раздела деинсталлятора файла установщика.


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

поэтому сначала вы должны увидеть, стоит ли его латать.

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

и, наконец, добавочная исправление данных размеров может вырасти за пределы исходных файлов.

основываясь на вышеуказанных темах, я не предлагаю вам заплата. Используйте полные установщики вместо