Как стать автором
Обновить

Комментарии 14

Почему не рассматривали вариант ClickOnce?
Позиции рассматривались до достижения приемлемого результата за разумное время. До ClickOnce дело не дошло
Посмотрите. С ClockOnce почти не нужно ничего делать. В студии задали нужные все параметры и все. Хотя тут гибче получается. Но там, к примеру, net инсталятор приложить — 1 галочку. Притом он сперва проверит наличие его в системе у пользователя. Да и установщик он берет из винды и не надо качать с сайта МС
Рекомендую попробовать NSIS, несмотря на то что проект сейчас не развивается — это очень достойный инсталлер.
В свое время также использовал Inno Setup, но потом перешел на NSIS. Это действительно очень достойный инсталятор с большой гибкостью настроек.
Спасибо за наводку!
WiX, конечно, монстр ещё тот, но на нём было бы не сильно сложнее, если не сказать проще. Особенно в части проверки .Net framework.

И тут на хабре проскакивал WiX# — habrahabr.ru/post/253819

А вот то, что вы сделали руками в скрипте — в GUI Inno Setup сделать можно?
Можно, но сделать установку .NET через GUI с наскока не вышло.

Отличный инсталлятор, на работе парочку прог завернул с помощью него. Немного советов от меня:

Требование запуска под админом можно прописать в секции [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 не исключение.

Приведу пример из реального проекта.

Парочка переменных
#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 эт вы зря.


Имею желание его изучить, возможно я к нему ещё вернусь.

Я это прочитал и понял. Подталкивал вот к этому:
Имею желание его изучить, возможно я к нему ещё вернусь.
Но наверно лучше сразу к WiX# перейти.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории