В настоящее время у меня есть проект с установщиком, который я сделал с NSIS, но я хотел бы иметь обновление для новых версий, у которых есть только измененные файлы, и покажет журнал изменений. Целевая платформа - это окна. Какие методы/предложения вам нужно сделать?
Как сделать установщик обновлений с NSIS?
Ответ 1
Возможно, вы захотите пересмотреть использование NSIS. Если вы используете исправление и распространение обновлений, вы, вероятно, получите наибольшую выгоду от использования технологии установщика, которая использует возможности установщика Windows (msiexec).
NSIS - это, в основном, программа, которая запускает и делает то, что вам нужно, в то время как установщик типа установщика Windows заставляет вас разделить ваше приложение на функции и компоненты, которыми может управлять служба MSI windows installer. MSI будет отслеживать такие вещи, как то, какие версии продуктов, которые вы установили, снова запускает ли программа установки в режиме обслуживания, разрешено ли вам устанавливать 2 продукта разных версий, может ли патч применяться к определенной версии продукта или любой другой вопрос, связанный с обновлениями и установками.
В основном большинство материалов, которые вы запрашиваете, будут доступны из коробки, если вы перейдете к технологии установщика Windows. Если вы используете NSIS (который не использует технологию установщика Windows), вам придется реализовать все это самостоятельно.
Так же, как пример, существует довольно всеобъемлющий строитель установщика под названием AdvancedInstaller (http://www.advancedinstaller.com/), который звучит так, как вы хотите. Кроме того, если вы хотите потратить остальную часть своей жизни на траловые форумы и группы новостей, то есть продукт с открытым исходным кодом под названием WiX, который делает что-то подобное;)
Ответ 2
Несмотря на мой предыдущий комментарий, я написал 5000-строчный установщик с использованием NSIS с 13 настраиваемыми страницами. Я даже посмотрел на исправление, и это немного взломало. Основной совет - убедиться, что вы исправляете версию, которую, по вашему мнению, исправляете, затем используйте один из доступных плагинов.
Существует несколько технологий патчей, которые сравнивают файлы и создают файлы изменений патчей и код NSIS, необходимые для их "установки". Я обнаружил, что NSIS Patch Gen сделал то, что мне очень понравилось, с наименьшим количеством хлопот. Документация немного тонкая, но как только вы это поняли, вы думаете: "О, я".
Вероятно, у вас будет немного проблем с автоматически созданным журналом изменений. Я бы посоветовал вам самостоятельно создать журнал изменений (или, по крайней мере, добавить к нему дополнительные изменения при каждом изменении приложения) и просто включить его, как если бы это был обычный файл приложения, и пусть генератор обновлений обновит его.
Ответ 3
Одним из возможных способов было бы хранить XML файл на вашем сервере загрузки, на котором была выпущена каждая версия, и список файлов, которые были изменены для каждой версии. Установщик напишет раздел реестра при установке версии файлов, которые он установил.
Затем при обновлении программа установки загружает и анализирует XML файл и находит любые узлы с более высокими номерами версий, чем то, что в настоящее время установлено. Вы отображаете все файлы в текстовом поле на странице установщика, а когда пользователь подтверждает, программа установки загружает все файлы, а затем обновляет реестр до последней версии.
Ответ 4
Вы знакомы с cURL? http://www.shininglightpro.com/products/Win32OpenSSL.html http://curl.haxx.se/download.html#openssl
он загрузит любой протокол, и вы сможете использовать его для загрузки файлов. это приложение командной строки.
в программе установки, запланировать программу, которая должна сначала проверить, будет ли запущена основная программа или нет, и выйти, если она запущена, если нет, вызывает завиток, чтобы загрузить пакетный файл с вашего сайта с обновлениями, а затем запускает командный файл.
пакетный файл, который он загружает, обновляет приложение, загружая правильные файлы с помощью 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}"
PRODUCT_NAME - это! define, который я создал, потому что я использую эти nsi файлы, как шаблон. это только часть раздела деинсталлятора файла установщика.
Ответ 5
Некоторые компиляторы, такие как Delphi, вносят большой вклад в окончательный исполняемый файл, даже если вы меняете небольшую часть своего кода.
Итак, сначала вы должны увидеть, стоит ли исправлять его.
Еще одно соображение - это исправление само по себе. Возможно, исправление может быть заблокировано некоторым антивирусным программным обеспечением в некоторых системных папках.
и, наконец, размер инкрементных патчей может превышать исходные файлы.
Исходя из вышеперечисленных тем, я не предлагаю вам исправления. Вместо этого используйте полных установщиков
Ответ 6
Мне удалось создать программу обновления патчей для моего приложения Windows (CLI, который использует NSIS в качестве установщика), выпустив приложение на свой персональный CDN (или некоторую хостинговую платформу) и используя преимущества модулей Node.js, таких как path
заменить двоичный файл (используя процедуру, аналогичную equinox.io) на заданную версию из CDN и winreg
, чтобы соответствующим образом обновить реестр Windows. Поскольку у меня есть пространство имен в разделе реестра Windows, деинсталлятор все еще работает для него.
Если кому-то нужна более подробная информация об этом, пожалуйста, спросите. Я рад помочь.