» Инсталлятор с обновлением предыдущей версии приложения

Официальный сайт SFX Creator
Группа SFX Creator [В]Контакте

В данном примере я покажу вам, как с помощью SFX Creator создать SFX архив/пакет инсталлятора, который будет распаковывать ваши файлы (производить полноценную установку, если вы создаёте пакет инсталлятора) в тот каталог, в который пользователь устанавливал приложение, пользуясь ранней версией вашего же SFX архива.
Для чего это нужно, объяснять, думаю, не нужно, довольно удобно, если установщик "знает", что программа, которую он собирается установить - уже существует у пользователя, установщику остаётся только обновить файлы программы новыми версиями.
Примечание. В данном примере я буду использовать свои пути в реестре, в этом примере не рассматривается ситуация, когда приложение установлено через родной инсталлятор.
Если вы хотите создать такой инсталлятор, который будет обновлять приложение, установленное через стороннюю/родную программу установки - вам необходимо найти такой ключ в реестре, который бы 100% идентифицировал бы папку с программой. В общем, всё зависит от конкретного приложения и вашей цели.


Способ 1: Придумываем путь и имя параметра сами

Шаг 1: Включаем определение директории приложения

Первым делом мы, конечно же, должны определить, в какой папке уже установлено наше приложение.
Для этого переходим в диалог Установка по ключу в реестре (иконка реестра в главном окне SFX Creator)
Ставим галочку на пункт Задействовать данную возможность
Ставим галочку на пункт Блокировать выбор каталога
В зависимости от типа приложения, выбираем корневой раздел, для примера я выберу HKEY_LOCAL_MACHINE
Заполняем верхнее текстовое поле, вводя ветку реестра (начиная с SOFTWARE), если вы создаёте много проектов в SFX Creator - рекомендую придумать себе "главную ветку" и в ней уже размещать разделы с конкретными названиями программ, например (далее буду использовать первое значение):
SOFTWARE\K.A.V. Soft\Моя программа
SOFTWARE\K.A.V. Soft\Ещё одна моя программа
Заполняем второе текстовое поле, придумайте имя параметра, в котором мы будем хранить путь к приложению, я введу так:
InstallDir
Обязателньо ставим переключатель в положение Продолжить, установив в указанный по-умолчанию каталог


Шаг 2: Сохраняем информацию для будущих установок

Для того, чтобы настройки на шаге 1 не были бесполезными - нам при установке нашего приложения необходимо записать данные в реестр с путём той директории, которая выбрана в качестве папки для установки.
Переходим в диалог Операции в реестре (выпадающий список Дополнительных возможностей в главном окне SFX Creator)

Тип операции
Запись (Параметр REG_SZ)

Корневой раздел
Указываем тот раздел, который указали на шаге 1
HKEY_LOCAL_MACHINE

Раздел реестра

Указываем тот раздел, который указали на шаге 1
SOFTWARE\K.A.V. Soft\Моя программа

Тип доступа
SetRegView 32

Имя параметра
Указываем то имя параметра, которое указали на шаге 1
InstallDir

Значение параметра
$INSTDIR

Добавляем запись.


Шаг 3: Удаляем предыдущую версию приложения перед установкой новой версии

Если в вашем проекте подключено создание деинсталлятора - то думаю неплохо было бы перед установкой новой версии - удалить старую, выполнив программу удаления в скрытом режиме перед началом установки
Переходим в диалог Выполнение приложений и Shell-команд (выпадающий список Дополнительных возможностей в главном окне SFX Creator)

Тип команды
Приложение

Приложение/файл или адрес в интернете
$INSTDIR\uninst.exe

Параметры приложения
/S _?=$INSTDIR

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


Шаг 4: Удаляем ключ реестра, который хранит информацию о каталоге приложения

Мы ведь не хотим такого поведения нашего инсталлятора, который заблокирует выбор каталога и/или установит приложение в старую папку? Это может случиться при случае, например, когда пользователь не удалит программу правильным способом через программу удаления, а просто очистит содержимое директории (хотя, опять же, если директория на диске существовать не будет - наш инсталлятор пропустит существование записи с путём в реестре), но мы сделаем всё правильно, избавим нас и пользователя от возможных неприятных ситуаций с нашим пакетом установки

Переходим в диалог Создать программу удаления (выпадающий список Дополнительных возможностей в главном окне SFX Creator)
Через кнопку Команды удаления переходим в диалог Операции в реестре

Заполняем там поля точно так же, как на шаге 2, изменив только тип операции на Удаление (Параметр)


Способ 2: Используем данные из ветки информации о программе в апплете "Установка и удаление программ"

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

Этот способ может подойти только в том случае, если в вашем проекте было подключено создание программы удаления.
Можно использовать тот ключ в реестре, который создаётся для программы удаления в момент установки приложения
Этот способ также может быть использован, если в ранней версии вашего инсталлятора не было ничего прописано, кроме подключенной функции создания программы удаления
Этот способ также может быть использован, если ранняя версия вашего инсталлятора создавалась в SFX Creator до 3 версии

Единственное условие, которое должно быть соблюдено - имя раздела программы в ветке Uninstall должна быть неизменяемая строка в зависимости от версии вашего инсталлятора
Другими словами, если вы используете в имени раздела информацию, которая постоянно меняется в разных версиях инсталлятора (например кроме имени программы указываете её версию), то данный способ вам не подойдёт, либо может подойти только для обновления конкретной версии приложения. Хотя если обновить конкретную версию - можно в новой версии вашего инсталлятора изменить ветку в Uninstall и придумать постоянное значение имени раздела

И так, для использования данного метода, выполняем шаги 1 и 3 из первого способа.
В качестве корневой ветки реестре используем: HKEY_LOCAL_MACHINE
В качестве раздела реестра используем: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ваше значение
*Ваше значение должно совпадать с значением поля Ветка в Uninstall в диалоге Настройка деинсталлятора
Если вы хотите данным инсталлятором обновлять только конкретную версию - указываете тот раздел, который был использован в предыдущей версии вашего инсталлятора
Параметр в реестре
Если ваш предыдущий инсталлятор был собран в SFX Creator до 3 версии, то на шаге 1 поставьте галочку на опцию Отфильтровать путь и в качестве параметра используйте значение UninstallString
Если ваш предыдущий инсталлятор был собран в SFX Creator 3 версии, то на шаге 1 галочку на опцию Отфильтровать путь ставить не нужно и в качестве параметра используйте значение InstallDirectory


Готово!
Теперь ваш проект сможет обновлять приложение, которое уже установлено через ваш инсталлятор ранней версии