Комментарии 14
Почему не рассматривали вариант ClickOnce?
Позиции рассматривались до достижения приемлемого результата за разумное время. До ClickOnce дело не дошло
Посмотрите. С ClockOnce почти не нужно ничего делать. В студии задали нужные все параметры и все. Хотя тут гибче получается. Но там, к примеру, net инсталятор приложить — 1 галочку. Притом он сперва проверит наличие его в системе у пользователя. Да и установщик он берет из винды и не надо качать с сайта МС
Рекомендую попробовать NSIS, несмотря на то что проект сейчас не развивается — это очень достойный инсталлер.
WiX, конечно, монстр ещё тот, но на нём было бы не сильно сложнее, если не сказать проще. Особенно в части проверки .Net framework.
И тут на хабре проскакивал WiX# — habrahabr.ru/post/253819
А вот то, что вы сделали руками в скрипте — в GUI Inno Setup сделать можно?
И тут на хабре проскакивал WiX# — habrahabr.ru/post/253819
А вот то, что вы сделали руками в скрипте — в GUI Inno Setup сделать можно?
Отличный инсталлятор, на работе парочку прог завернул с помощью него. Немного советов от меня:
Требование запуска под админом можно прописать в секции [Setup] с помощью параметра PrivilegesRequired.
В [Tasks], как все уже догадались, добавляются задания. Сами по себе они ничего не делают, только создают галки. Но если добавить затем задание в какую-либо строчку в другой секции, то эта строчка выполнится только при нажатой галке. Например:
Флаг uninsneveruninstall в секции [Files] используется для предотвращения удаления файла после деинсталляции программы. Иногда очень важно сохранить, например, базу данных. Полезно использовать совместно с onlyifdoesntexist. В общем, защита от «случайной» переустановки программы.
Вообще, у Inno Setup хорошая документация. Перед тем как писать что-то на паскале, гляньте в Support Functions Reference, может нужная вам функция уже есть (там, в том числе, есть функции для работы с реестром и с INI-файлами).
Требование запуска под админом можно прописать в секции [Setup] с помощью параметра PrivilegesRequired.
В [Tasks], как все уже догадались, добавляются задания. Сами по себе они ничего не делают, только создают галки. Но если добавить затем задание в какую-либо строчку в другой секции, то эта строчка выполнится только при нажатой галке. Например:
[Tasks]
; Создание ярлыка не для основной программы, а для настройки
Name: "setupshortcut"; Description: "Создать значок для настройки Программы"; GroupDescription: "{cm:AdditionalIcons}"
; Установка Firebird
Name: "installingfirebird"; Description: "Установить Firebird 1.5"; GroupDescription: "База данных и драйверы:"
[Icons]
; Данный ярлык создастся только в том случае, если будет нажата галка из задания "setupshortcut" выше
Name: "{commondesktop}\Настройка Программы"; Filename: "{app}\setup.bat"; Tasks: setupshortcut
[Run]
; Firebird установится только в том случае, если была нажата галка из задания "installingfirebird" выше
Filename: "{src}\dist\Firebird\Firebird-1.5.6.5026-0-Win32.exe"; Description: "Firebird 1.5"; StatusMsg: "Установка Firebird 1.5..."; Tasks: installingfirebird
Флаг uninsneveruninstall в секции [Files] используется для предотвращения удаления файла после деинсталляции программы. Иногда очень важно сохранить, например, базу данных. Полезно использовать совместно с onlyifdoesntexist. В общем, защита от «случайной» переустановки программы.
Вообще, у Inno Setup хорошая документация. Перед тем как писать что-то на паскале, гляньте в Support Functions Reference, может нужная вам функция уже есть (там, в том числе, есть функции для работы с реестром и с INI-файлами).
В дополнение к Inno Setup я бы хотел порекомендовать Inno Script Studio. Это надстройка над компилятором InnoSetup, которая позволяет автоматизировать процесс написания скрипта установщика.
Вот примеры:
Больше можно найти на странице продукта.
Вот примеры:
Скриншоты продукта



Больше можно найти на странице продукта.
На любом языке программирования можно писать как на Фортране, и InnoSetup не исключение.
Приведу пример из реального проекта.
Парочка переменных
Парочка функций с миллионом параметров, бомбящих все подряд в строку
Вот так используем
А теперь — сеанс магии: раскатываем эту строчку так чтобы она превратилась в набор инструкций InnoSetup:
Вуаля. 200 килобайт кода описывающие по много раз одно и то же в разных вариациях — превратились в несколько строк. А блоатварь уже не пишется руками, а генерится на лету. Профит!
Приведу пример из реального проекта.
Парочка переменных
#define CR '~~'
#define i
#define listToProceed ''
Парочка функций с миллионом параметров, бомбящих все подряд в строку
#define mkPInDdCode(src, dst, arch, indd, typo, prod, place, archmark1, archmark2, pf) \
'Source: ..\..\image\bin\' + arch + '\' + indd + '\' + src + '.pln; DestDir: {code:Get' + \
typo + 'Path_' + archmark1 + '|{' + pf + '}\Adobe\' + prod + '\}\Plug-ins' + place + '; ' + \
'DestName: ' + dst + '.pln; Flags: ignoreversion overwritereadonly replacesameversion ; ' + \
'Check: Checked' + typo + '_' + archmark2 + CR
#define mkInDdCodePair(indd, typo, prod) \
mkPInDdCode('FooBin', 'Foo', 'x64', indd, typo, prod, '', '64', '64', 'pf') + \
mkPInDdCode('FooBin', 'Foo', 'x86', indd, typo, prod, '', '32', '32in64', 'pf32') + \
mkPInDdCode('FooBin', 'Foo', 'x86', indd, typo, prod, '', '32', '32', 'pf32')
Вот так используем
#define listToProceed \
mkInDdCodePair( 'cc2014', 'S71', 'Adobe InDesign Server CC2014') + \
mkInDdCodePair( 'cc2014', 'CC2', 'Adobe InDesign CC2014') + \
mkInDdCodePair( 'cc2014', 'Icc2', 'Adobe InCopy CC2014')
А теперь — сеанс магии: раскатываем эту строчку так чтобы она превратилась в набор инструкций InnoSetup:
#sub mkPairEmit
#emit Copy(listToProceed, 1, i - 1)
#pragma message "<" + Copy(listToProceed, 1, i - 1) + ">"
#expr Delete(listToProceed, 1, i + Len(CR) - 1)
#endsub
#sub mkPairSubFiles
#for { i = Pos(CR, listToProceed); i > 0; i = Pos(CR, listToProceed) } mkPairEmit
#endsub
#expr mkPairSubFiles
Вуаля. 200 килобайт кода описывающие по много раз одно и то же в разных вариациях — превратились в несколько строк. А блоатварь уже не пишется руками, а генерится на лету. Профит!
Про WiX эт вы зря. У меня тоже не лежит душа к xml, но за пару дней разобрался как зарегистрировать сертификат, установить новую службу, добавить левые файлики, да ещё и с обновлениями. WixEdit очень сильно упрощает написание, кишки MSI очень сильно усложняют.
Постараюсь кратко ответить на все комментарии.
Во-первых скажу что вопрос выбора инструмента, это, во многом, вопрос субъективных личных предпочтений. Большое спасибо за полезные замечания и поелзные советы — они определенно будут учтены мной, когда что-то подобное придётся делать снова.
Но. Данная статья не позиционировалась как сравнение инструментов. Обычно статьи такого плана рождаются у меня так — возникает сугубо личная задача, эта задача успешно решается и возникает желание поделится с обществом достигнутыми результатами, дабы следующий «неофит» не тратил много времени на поиск информации. Принцип таков: сделал сам — отдай наработки другим. Считаю это правильным.
Изложенный выше текст приведен «как есть», по факту решения задачи. Он не претендует на академичность и не выставляет описанный инструмент в преимущественное по сравнению с другими продуктами положение.
Имею желание его изучить, возможно я к нему ещё вернусь.
Во-первых скажу что вопрос выбора инструмента, это, во многом, вопрос субъективных личных предпочтений. Большое спасибо за полезные замечания и поелзные советы — они определенно будут учтены мной, когда что-то подобное придётся делать снова.
Но. Данная статья не позиционировалась как сравнение инструментов. Обычно статьи такого плана рождаются у меня так — возникает сугубо личная задача, эта задача успешно решается и возникает желание поделится с обществом достигнутыми результатами, дабы следующий «неофит» не тратил много времени на поиск информации. Принцип таков: сделал сам — отдай наработки другим. Считаю это правильным.
Изложенный выше текст приведен «как есть», по факту решения задачи. Он не претендует на академичность и не выставляет описанный инструмент в преимущественное по сравнению с другими продуктами положение.
Про WiX эт вы зря.
Имею желание его изучить, возможно я к нему ещё вернусь.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Inno Setup: создание инсталлятора на примере развертывания C# приложения