Q: InstallShield Limited Edition и вообще про инсталляторы.

Прошу прощения что я не о выборах, но вот такие вот практические вопросы.

Вопрос номер раз

  1. Visual Studio 2010, хочу сделать проект изготавливающий инсталлятор. Ну значит New Solution - и там есть пимпа "Enable InstallShield LE".
  2. Жму в пимпу, мне предлагают этот InstallShield скачать. Скачиваю, запускаю инсталлятор.
  3. Инсталлятор инсталлирует, говорит что надо Studio перезапустить.
  4. Перезапускаю. Одновременно прилетает письмо с серийником.
И вот теперь имею проблему:
  • Куда нужно сунуть серийник - просто не понимаю. Все меню облазил, не нашел.
  • InstallShield-проект создать нельзя. Не создается, failed и все.
Кто виноват и что делать?

Про существование NSIS знаю, но хотел попробовать с InstallShield, чтобы вообще понимать чего хотеть.

Вопрос номер два

Посмотрел, а как себя ведут разные варезы, уже установленные на машине. Вижу следущее

  1. Те, кто использует MS-овский рантайм от VS2005 или 2008 - те, преимущественно, честно приносили redistributable и куда-то его ставили, в каталоге приложения msvc*.dll нету.
  2. А вот пользователи рантайма от 2010 - имеют его у себя в директории с приложением по большей части.
Считается ли второй способ вежливым к юзеру? Там цена вопроса, конечно, мегабайт или около того, Qt-шных DLL-ей у меня будет в разы больше, поэтому это вопрос именно принципа, а не экономии юзерского диска.

Comments

Вообще в IS, насколько я помню (сам я с этим продуктом никогда не работал, только материл разработчиков если у них в инсталляторе в нерусских виндах крокозябры показывались), была такая штука как merge module. По-моему микрософтовские redistributables приличные люди делали именно через них, и ставились они при этом в System32, но только если никто другой их туда еще не поставил.
И в реестре имелся счетчик, который все желающие поюзать таким образом поставленный рантайм при инсталляции инкрементили, а при деинсталляции декрементили.

А я как-то раз даже нарисовал на NSIS инсталлятор, который по парочке DLL (но не msvcr?? - у меня все mingw32 собиралось, причем в режиме кросс-компиляции), был совместим с этими install-shield-овскими счетчиками. В смысле если обнаруживал поставленную через merge module dll, честно инкрементил ее счетчик, а если нет - честно его заводил со значением 1.

Ну, можно взять просто соответствующий vc10-redist-x86.exe и он вообще все сам сделает.

То есть как сделать прилично - я догадываюсь. Но если вдруг "общественно приемлемо" так не делать - то я и не буду.

Насколько я помню, с точки зрения IS "взять сооответствюущий" было в чем-то некошерно. Его нужно было как-то трансформировать. Чтобы он стал "лицом секретным, фигуры не имеющим".
Вообще, взаимоотношения между IS и Windows Installer в современных виндах - это какая-то сага, достойная пера Снорри Стурлссона.

Чтобы знать, чего хотеть, попробуй InnoSetup. Для меня инсталляторы - болезненно-важная вещь, я на них трачу ежегодно десятки часов, лучше Inno пока для всякой мелочи не нашел.

А раз ты тут попался.

Для тебя, случайно, copy protection - не болезненно-важная вещь? А то имею вопросов....

1. Да.

2. Читать swrus

3. Мой опыт - такой: у меня очень, очень слабая защита, писаная на коленке 8 лет назад. И я совсем не стесняюсь собирать данные об инсталляциях. Так вот: тыреных меньше, чем купленых, раза в 4. Поэтому свою защиту я не трогаю, считаю что всё ок.

Вы все сговорились, похоже (я тебя не первого спрашиваю).

Я просто вот вообще не хочу про это думать и готов кому-то из промышленных защищальщиков заплатить баксов 300 или даже 500. Но не могу понять кому.

Год-два назад вроде круче всех был Армадилло(?).
Я его слегка посмотрел, и решил что от интеграции с ним гемора будет больше, чем от оставления самописания самописаным.

Прикинь, самописная защита - это порядка 20-30 килобайт прозрачнейшего сишного кода. Сгенерировать дурацкий ключ из имени юзера. Проверить, что он совпал. Не работать, если не совпал. Записать в какое-то смешное место (буквально в registry, честно) время первого старта. Не работать, если больше 30 дней. Ффсё. Это убъёт всех не-хариров. А хакиры всё равно сделают любую защиту, кроме онлайнового сличения паролей. Которое, кстати, тоже килобайта эдак три кода на MFC.

А теперь представь, что у тебя зародились лёгкие сомнения, что купленая защита у тебя косячит и убивает легальные инсталляции, или там пропускает срок экспайра.

Как ты будешь спать с этой мыслью ;-) ? А она ведь непраздная - защита всегда косячит, и от её косяков вреда больше, чем от всех остальных, вместе взятых.

Да, это понятные все сомнения. При этом, меня больше волнуют легальные юзеры, которых никак нельзя обижать зазря.

А вот скажи еще, а ты честно купил у MS (VeriSign) ключ, которым все подписываешь или забил на это все?

> При этом, меня больше волнуют легальные юзеры, которых никак нельзя обижать зазря.

Угу. И по-моему это легче обеспечить, если твоя защита писана на коленке и влазит на экран.

> А вот скажи еще, а ты честно купил у MS (VeriSign) ключ, которым все подписываешь или забил на это все?

Я раньше не покупал, потому что было ненужно. А теперь, видимо, куплю через месяц-другой, чтобы облегчить страдания с IE9, которые ещё усиливаются в W8. Верисайн продает за $100 на год с купоном, см. swrus и гуглу.

Я правильно понимаю, что для основных вендоров (сертификаты которых сходу есть в винде), нет никакой разницы между верисайном и комодо (к примеру)?

Суда по беседам swrus-цев, абсолютно пофигу, откуда сертификат.
Весной помню они любили комодовский, сейчас - верисайновый.
Дешевле $100 у верисайна мне не попадался.

Ну да, я уже въехал - $99 за верисайн, 75 за комоду, но комоде надо чтобы whois у домена был правильный, а верисайну кажется насрать.
Но верисайном можно драйвер подписывать.

В-общем, я уже пошел whois править, а дальше будет видно.

А какой, кстати, купон на комод, и где ты его нашел?

И еще - вроде Верисайн давал забеслатно Win7 logo программу, может это хорошо, я не задумывался.

Это не купон, это через twocows.

Там кнопка есть, но так как я не зарегистрирован, то я не смог дальше в квест пройти. Но пишут что работает.

Спасибо. Надо запомнить, $25 на дороге не валяются.

swrus(-main) - ужасное чтение.
То есть, понятно, есть какие-то места, про которые я не знаю вообще ничего (вроде регистраторов), там вообще ничего непонятно.

А вот там где понятно - хочется расплакаться от какого-то безобразно низкого общего уровня (пример - большинство обсуждений про Мак и Линукс)

swrus читается поиском по ключевым словам. Подряд его конечно тяжело читать. Кроме того swrus - это как бы символ. За ним стоит ISDEF, который уже покруче. С ними ассоциируются asp-shareware, которое ещё покруче, и форумы на Joel-е, которые собственно и есть, видимо, лучший источник. Но я же не помню откуда что взялось в голове, вот так вот всё это как-то просматриваешь, что-то оседает.

Не, ну я не подряд читал же. А именно места, за которые глаз цеплялся.

Вот я только что читал на некоторую тему
http://discuss.joelonsoftware.com/?biz

Ну, поприятнее свруса. И там же недавно писали аггрегатора uISV-шных блогов:
http://www.planet-microisv.com/

Оно работает.

Но чудовищно! Эти безумные миллионы макросов - это какая-то жесть.

Это Armadillo? Они все такие, видимо. Плюс они имеют тенденцию вдруг умирать, или отсрачивать компатибилити с новой OS на годик-другой.

Это InnoSetup

Проблема защиты меня будет волновать месяца через два. Да и то, я думаю что не будет.

Хмм.. Это какой-то другой ИнноСетап. У меня миллионов макросов нету - есть скрипт, строчек 40. Похож на .ini файл, расширение .iss.

Ну да. Я тамошние примеры читаю

Это на мой взгляд немэйнстримное использование тулся.
InnoSetup славен легкостью изготовления простых сетапов.
Т.е. при правильном его использовании кода ты не видишь вообще.
А если что-то посложнее - то возможно лучше что-то другое.

Ну да, наверное.

Меня бесит поведение в духе "чтобы оно показало EULA - добавьте строчку EULA=filename.txt в секцию Setup" (имя директивы неправильное, но смысл верный).

То есть да, оно проблему изготовления простых сетапов решает с одной стороны. С другой - при наличии такого количества спец-переменных (флагов, макросов), вроде бы типичная задача "Куда ставить будем - всем или в home dir" не имеет простого решения одним флагом, а требует ручного расписывания для каждого файла куда его класть. Ну или я плохо разобрался.
Чем-то напомнило PL/1 - для каждого действия есть конструкция языка (а не библиотечная функция)

Но, да, инсталляторы создаются и пользоваться можно и простые задачи решаются просто и вообще.

То есть я NSIS в результате даже и не смотрел пока, удовлетворен этим. Наверное, потом меня это поимеет.

> Вопрос номер два

При тиражах выше тысячи инсталляций в месяц самый вежливый способ к юзеру - всё что только можно статически влинковывать в .exe, а остальное - класть в свою директорию. Явщики вон начиная с б.м. живого тиража с собой проверенную версию рантайма тащщат, и это абсолютно правильно.

Ага-ага. Помню у меня какие-то Java-библиотеки от клиент-банка встали в JVM, которую принес Adaptect Storage Manager, а не в системную. Было смешно, когда понял в чем дело.

А так - это же все в пределе - "portable-версия приложения, с vmware в пузе". Неплохая идея, конечно, но какая-то слишком радикальная.

В реальной жизни - ты статически линкуешься с MS Runtime (и Qt, если используешь) или все-таки нет?

> Неплохая идея, конечно, но какая-то слишком радикальная.

Единственно-верная. К этому всё идёт, все там будем.

Например .NET программы совершенно нежизнеспособны без того, чтобы к ним всю их внешнюю обвязку присобачивать ilmerge. Получаются такие здоровенные .exe, что vm-машина уже совсем не кажется излишней.

> В реальной жизни - ты статически линкуешься с MS Runtime (и Qt, если используешь) или все-таки нет?

В реальной жизни я всегда статически линкуюсь с CRT, ATL, MFC, zlib, libxml, libxslt и ещё в зависимости от приложения - с разными MS-ными и опенсорцными библиотеками. Если с чем-то мне статически не удается слинковаться, я серьезно огорчаюсь - это будут гарантированные проблемы при инсталляции и пожжерке, гемор короче конкретный. Опенсорцные библиотеки я раз в несколько лет перелинковываю руками в статическую форму и храню бережно.

Что такое Qt я не знаю.

И когда в zlib находят неприятную багу - ты за жалких полгода выпускаешь апдейт?

99% всех баг в zlib меня абсолютно не касаются. Они же аффектят какие-нибудь мультитомные 64-х битные архивы с именами файлов в юникоде. А у меня она, например, распаковывает 2048 байт в буффере в памяти, которые сама же и запаковала.

Некоторые мои знакомые шараварщики компилируются VC6. И это, в целом, разумно, хотя я так не могу, меня тошнит.

IMHO самое правильное предложить на выбор обычную установку или "portable".
2005/2008 ставят runtime в WinSxS:
http://msdn.microsoft.com/en-us/library/dd293574.aspx
раздел "Differences between ..."

Начиная с 2010 рантайм перестал требовать сношения с манифестами, так что их можно просто класть рядом. Хотя линия партии уже столько раз менялась, что мы у себя, например, предпочитаем как и с предыдущими давать redist.

Насчет дистрибутива - а вариант с родным Visual Studio Installer и msi на выходе совсем не катит?

Ну msi - это как-то нечеловеколюбиво. По мне, так exe - обязательно, а msi - нет.

Ну там запускалка в виде setup.exe рядом тоже болтается, хотя смысла в ней мало.

Да, я попробовал уже.

Но это - два файла. Можно, конечно, как рекомендуют некоторые, положить туда еще Readme и все это завернуть Zip-ом, но по-моему это какой-то бесчеловечный рецепт.

А просто с MSI - я не уверен, что не будет заметного процента отказов ровно в этом месте

Помучавшись с ИнсталлШилдом, я перешел на (бесплатный) Викс(http://wix.sourceforge.net/) и вам советую.

NSIS мне посоветовали раньше, InnoSetup полчаса назад :)
Ужос!

Но посмотрю их все, спасибо!

Самое главное - помнить, что в наше тяжелое время 99% крутости инсталлятора заключается в том, как он помогает проходить IE9 smartscreen.

Это дико бесит и снижает продажи, когда варез недели две подряд объявляется злам и непроверенным. Вот об этом и надо реально думать, остальное всё фигня. ZIP файл с ридми в середине - не худший вариант. Ещё мне лично нравятся годами не меняющиеся микро-вебоинсталляторы, которые просто с сайта качают последнюю версию.

Не помогает ли в этом месте подпись (сайта, приложения)?

Слабо помогает. Реально помогает неизвестно что, но видимо число скачиваний. Но не только оно, потому что бывают случаи, когда их много, а оно всё ругается. А бывают, когда с первого скачивания OK.

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

То есть надо сделать какую-то популярную фриварь - и будет счастье?

Хорошая идея. Надо попробовать.

В очень давние времена, когда я таки программировал, мне по душе пришёлся NSIS - на нём и остановился (любовь с инсталшилдом не пошла, хотя делал много попыток)
Если учесть что nisом ныне даже гугл не брезгрует и активно использует - то чем ты хуже? ;)

мне нравится и кажется кошерным когда программа "всё своё ношу с собой". в папке с программой или прилинковано

> честно приносили redistributable и куда-то его ставили,
> в каталоге приложения msvc*.dll нету.

Оно всё шло в c:\windows\winsxs
VS 2010 ещё не ставил - пока нет необходимости.

Вполне нормально просто копировать. Вот тут описаны разные способы "Choosing a Deployment Method":

http://msdn.microsoft.com/en-us/library/ms235316(v=VS.90).aspx
http://msdn.microsoft.com/en-us/library/ms235291(v=VS.80).aspx

Цитата:

Install a particular Visual C++ assembly as a private assembly for the application using files provide in the Program Files\Microsoft Visual Studio 8\VC\Redist directory. This way is recommended to enable installation of applications by users who do not have administrative rights or when it should be possible to run an application from a share. For an example, please see How to: Deploy using XCopy.

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

Надо сказать, что для 2010 все стало сильно проще, скажем манифест - необязателен.

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

Разве сейчас (я просто не в курсе) ещё идет погоня за памятью и использованием совместных с другими ресурсов (.dll)? Почему не иметь все нужные ресурсы при себе?

Ну да это вопросы чайниковсккие, наверное...

Не, ну еще в registry нагадить - чтобы настройки были.

А возможность "установки без прав администратора" - важна?

>Не, ну еще в registry нагадить - чтобы настройки были.
Да эт-то пожалста, само по себе загаживание регистри (т.е. создание своих уникальных веток и ключей в них) как я понимаю не вредно. Неплохо бы конечно их потом убрать при деинсталляции но это я так понимаю - как повезет.

>А возможность "установки без прав администратора" - важна?
Лично мне - да, важна. Для меня лично "установка без прав администратора" означает почему-то "безопасность" и "хороший софт".

Я не очень понимаю зачем стремиться нагадить в "запретные" области - чтобы потом это подхватилось каким-то системным бекапом или перенеслось на другой комп системной тулзой переноса настроек?

Последний раз когда я махнул не глядя в UAC-е "разрешить", мне установился какой-то вирус (Trojan.Mayachok.1 - третий вирус в моей жизни на моем компьютере который нанес вред). Так что я теперь очень внимательно читаю что мне пишет UAC.

На мой взгляд, идеальная программа (в смысле дружественности к пользователю в инсталляции\удалении) - мюторрент. Почти ничего никуда не гадит, не требует администраторских прав и т.п. Самая отстойная из виденных - это Sun-вская (Oracle-овская) java, которая просто задолбала уже вызывать UAC. А, и ещё какой-то отстой из майкрософтовских (что-то типа MS SQL Express, который для чего-то понадобился и навалил такую кучу всякого г-на, в том числе какие-то redistributables которые потом вычистить было очень и очень геморно).

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

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

Wine меня вовсе не парит: будет спрос, так выпущу версию под Linux, Qt рулит.

А возможность поставить DLL-ки от Visual Studio в System32 (или куда там оно их ставит) - это означает, что потом их Windows Update обновит при обнаружении каких-то security-проблем в них. Что полезно.
Я подумаю над хранением настроек не в Software (куда нужны права администратора) а в User, как минимум по выбору оного юзера.

Вместе с тем, Google Chrome, который вообще все хранит в Users/, какими-то бешеными гигабайтами - меня лично раздражает куда больше, чем Firefox (у которого Profile настраивается) и даже больше чем MSIE (который основные потроха держит в системе).

>Вместе с тем, Google Chrome, который вообще все хранит в Users/, какими-то бешеными гигабайтами - меня лично раздражает куда больше, чем Firefox

Не знаю чо там и как, но после установки хрома у меня перестали работать клики на гиперлинки в аутлуке. Вернее, при клике например на http://alextutubalin.livejournal.com/272564.html?replyto=3627700 выплывал вендовский диалог выбора приложения для открытия файла "3627700" и что-то в этом роде. Плохой софт. Испортил мне что-то в системе. Снес и стало хорошо.

*Бешеные* гигабайты в users это плохо, т.к. например у корпортаивных юзеров где настроены роуминговые профили (или просто синхронизация профиля), оно синхрится в сеть. И если файла много, то shutdown (и загрузка) долгие. Хотя юзер об этом конечно не узнает (что это именно твой варез ему замедлил загрузку).

> это означает, что потом их Windows Update обновит при обнаружении каких-то security-проблем в них. Что полезно.

По-моему это абсолютно бесполезно. Вот совсем.

А запутаться в версиях DLL-ей и перестать работать для 20% юзеров - запросто случится.

> и даже больше чем MSIE (который основные потроха держит в системе).

Правильный, хотя и не для всех ход - уметь пользоваться тем, что уже есть в Виндах. А тем, чего нет - не пользоваться, ограничивать себя. У меня весь UI на всех работах уже несколько лет построен на IWebBrowser (см. пару статей в моём ЖЖ). Это значит, что если в системе есть IE6 (а он есть всегда), у меня программа размером 150K делает красивенькие кнопочки с картиночками, тулбарчиками и всякой такой фигнёй (ну HTML-же). И переносится под WebKit лёгким движением руки. Ну собственно оно лёгким движением руки переносится в чистый Веб и становится онлайн-приложением (сервер на чистом C).

А вот всякие уроды типа Гугла для тех же примерно целей всю фрибсдю с собой носят.

Ещё важно все .exe-шники проверять всегда на VirusTotal.com.
Там должен быть строго 0 срабатываний.
Если не 0 - Гугла обзывает вредным сайтом в поиске, что дико вредно для продаж, и есть подозрение, что M$ тоже это учитывает в своих пакостях.

Да, на эти грабли уже наступлено (фриварным LibRaw, но от этого не легче)