metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-09-29 05:00 pm

Инсталляция окамла под виндой

Занимаюсь типичным местным вудуизмом - ставлю прогу из инсталлятора в виртуальной машине, проверяю, что она вообще работает, а потом пытаюсь ее запустить в стиле "xcopy deployment", т.е. копирую инсталлированную папку программы на другой комп и изучаю, что нужно для запуска.

Вообще подобная практика, конечно, сомнительна, особенно в свете толкаемых [livejournal.com profile] zelanton уверений, что во низкоуровневых внутренностях прикладным программистам разбираться запрещено. Но таким образом я набрал уже приличную коллекцию виндовых (а особенно портированных с линукса) программ, которые переживают без переинсталляций любые пертурбации с компами, переустановку виндов и железа, переезды между разными рабочими местами, носимые винты, итд

Так вот в окамле в таком случае оказалось, что там, мало того что пути пишутся в реестр, так еще и переменная окружения используется для поиска либ. С ходу не вижу, почему бы не сделать при отсутствии оных переменных и ключей реестра использование дефолтных значений вроде "папка_с_exe\..\lib\".
Т.е. что под виндами, что в линуксе авторы софта как-то очень уж надеются на стандартную инсталляцию. В некоторых особо сложных случаях это допустимо, но я обычно стараюсь делать прогу запускаемой, даже если психи ее просто скопировали, так проще жить как самому, так и пользователям.

[identity profile] gds.livejournal.com 2010-09-29 05:23 pm (UTC)(link)
надо использовать native code: не понадобится писать пути в реестр (не нужны, чтобы найти .exe), не требуется OCAMLLIB для поиска слинкованного, а нужные .dll (если линкуется не статически) нужно класть рядом с готовой программой. Я так распространяю юзерам-дебилам, все довольны.

[identity profile] zelanton.livejournal.com 2010-09-29 05:24 pm (UTC)(link)
ребе, а вот не надо пожалуйста, я не говорил "запрещено"

[identity profile] dimitrykakadu.livejournal.com 2010-09-29 05:32 pm (UTC)(link)
Так вроде переменные среды можно проставлять в батниках перед запуском непосредственно ехе файла? Или нет?

[identity profile] dimitrykakadu.livejournal.com 2010-09-29 05:35 pm (UTC)(link)
Хотя от психов это не особо спасает. В линуксе вроде можно в sh скрипт забить исполняемый файл в виде текста и потом его запускать. Но это уже дико.

[identity profile] metaclass.livejournal.com 2010-09-29 05:41 pm (UTC)(link)
Я так и делаю.

[identity profile] oldmann.livejournal.com 2010-09-29 05:42 pm (UTC)(link)
так многие linux-инсталляторы устроены.

[identity profile] oldmann.livejournal.com 2010-09-29 05:43 pm (UTC)(link)
ребе, увидеть, что инсталлятор ставит, можно в любом uninstall-manager, без дрочки вручную.

[identity profile] oldmann.livejournal.com 2010-09-29 05:44 pm (UTC)(link)
именно такими повадками создаётся dll Hell.

[identity profile] vp.livejournal.com 2010-09-29 06:05 pm (UTC)(link)
инсталятор совершенно не обязан вам что-то сообщать :)

[personal profile] alll 2010-09-29 06:08 pm (UTC)(link)
но uninstall-manager категорически обязан это знать ;)

[identity profile] fas-tm.livejournal.com 2010-09-29 06:09 pm (UTC)(link)
Это правильно. Я в реестр максимум могу записать настроенные юзером положения окошек и панелек если это GUI. Все остальное должно работать без переменных среды и прочих ахтунгов.

[identity profile] metaclass.livejournal.com 2010-09-29 06:12 pm (UTC)(link)
Вроде наоборот, он так лечится.
В смысле, что прога, dll которой лежат у нее в папке, в большинстве случаев не сломается если другие проги обновятся вместе со своими версиями этих же dll.

[identity profile] fas-tm.livejournal.com 2010-09-29 06:13 pm (UTC)(link)
в общем то верно. Но есть нюансы.
Поставленный рантайм питона в винде был обновлен. Старый софт отказался работать. Юзеры предали анафеме разработчиков.

[identity profile] oldmann.livejournal.com 2010-09-29 06:25 pm (UTC)(link)
ребе, читайте внимательнее - дополнительное ПО uninstall manager фиксирует, что и куда программа копирует, что она пишет в реестр, как меняет переменные окружения. и проще единожды прогнать инсталлятор в ней, чем потом руками все недостающее копировать.

[identity profile] oldmann.livejournal.com 2010-09-29 06:34 pm (UTC)(link)
зато может резко стать несовместимой с системой. интероперабельность при такой модели - нулевая.

[identity profile] aamonster.livejournal.com 2010-09-29 06:50 pm (UTC)(link)
Не-не-не, именно так он не создаётся. Для настоящего dll hell dll-ки от одной программы должны перекрывать dll-ки от другой, приводя к непредсказуемому результату.

[identity profile] hshhhhh.livejournal.com 2010-09-29 07:52 pm (UTC)(link)
то есть по-твоему конфиги надо хранить в .ini файлах, а не в реесте? еретик.

[identity profile] http://users.livejournal.com/_slw/ 2010-09-29 07:57 pm (UTC)(link)
сам ты еретик
шарп уже опять на инишках

[identity profile] vp.livejournal.com 2010-09-30 03:54 am (UTC)(link)
смотря какие конфигиги. Конфиги типа "последние координаты вот этого окна" - все равно где. Это конфиг текущего пользователя системы.
А вот конфиги типа конфигурирования каких-то алгоритмов софта - это должно лежать около программы, можно таки даже в .ini, одни на всех.

[identity profile] vp.livejournal.com 2010-09-30 03:55 am (UTC)(link)
Это где? ссылку можно?

[identity profile] gds.livejournal.com 2010-09-30 05:13 am (UTC)(link)
из-за апгрейда системы? Ну так и софт надо апгрейдить, если что-то серьёзное ломают в системе. Не пофиг ли, где dll лежат, если они явно нестандартные и с другими программами не перекрываются.

[identity profile] oldmann.livejournal.com 2010-09-30 05:18 am (UTC)(link)
как минимум с гуём и вводом-выводом перекрываются.
если писать свой гуй и использовать direct hardware access, это уже встроенная система получается, виндовс не нужэн.

[identity profile] gds.livejournal.com 2010-09-30 06:27 am (UTC)(link)
если меняются интерфейсы гуя или ввода-вывода несовместимым для программы образом, нет разницы, куда класть .dll, которые не пересекаются с другими программами (не с ОС) -- всё равно оно поломается, и апгрейд какой-либо другой программы ситуацию не спасёт.

[identity profile] avnik.livejournal.com 2010-09-30 07:01 am (UTC)(link)
Ребе, когда в вашей винде уже изобретут пакетный менеджер?

[identity profile] permea-kra.livejournal.com 2010-09-30 07:07 am (UTC)(link)
>>А вот конфиги типа конфигурирования каких-то алгоритмов софта - это должно лежать около программы,
можно таки даже в .ini, одни на всех.

По-хорошему, должны быть дефолтные, общесистемные (перекрывающие дефолтные) и юзверские (перекрывающие общесистемные и дефолтные). С возможностью запретить переопределение дефолтных юзером.

[identity profile] metaclass.livejournal.com 2010-09-30 07:32 am (UTC)(link)
Да нафиг не нужен тут пакетный менеджер. Нужен xcopy deployment в виде "скачал архив, распаковал в отдельную папку, все заработало".
Чтобы было типа "ставишь пакет А, зависящий от пакета Б, но пакет B зависит от другой версии пакета Б и возникает конфликт"? Зачем мне это счастье?
А то я вот ставлю окамл с зависимостями от tk84, а у меня уже стоит питон с зависимостями от tk85, но они друг друга не видят и друг другу никак не мешают, тупо две никак не связанные независимые папки.

[identity profile] avnik.livejournal.com 2010-09-30 07:47 am (UTC)(link)
количество идиотов не дадут вам делать такой деплоймент.
А количество гуеинсталлеров считающих что "мы ставимся на чистую систему" и имеющий привычку срать в /usr/lib или /system32 или (как там оно на винде зовется) будет зашкаливать за 9000

[identity profile] metaclass.livejournal.com 2010-09-30 08:02 am (UTC)(link)
На винде уже очень давно так никто в норме не делает.

[identity profile] permea-kra.livejournal.com 2010-09-30 10:32 am (UTC)(link)
>>"ставишь пакет А, зависящий от пакета Б, но пакет B зависит от другой версии пакета Б и возникает конфликт"?

У белых людей такого уже давно нет, все мажорные версии лежат в отдельных слотах. Т. е. как бы и версия того же пакета, но конфликтов нет, поскольку раскрывается в разные файлы. А симлинки на дефолтные версии отдельным скриптом конфигурируется.

[identity profile] permea-kra.livejournal.com 2010-09-30 10:33 am (UTC)(link)
Зато в реестр срут почем зря. COM однако.

[identity profile] metaclass.livejournal.com 2010-09-30 10:44 am (UTC)(link)
Не знаю, я с ходу на дебиан впереть пакет с зависимостями отличными от тех, что лежат в репо, не понял, как.

[identity profile] metaclass.livejournal.com 2010-09-30 10:44 am (UTC)(link)
И в реестр уже давно никто не срет.

[identity profile] permea-kra.livejournal.com 2010-09-30 11:10 am (UTC)(link)
Адоба срет и какие-то левые службы устанавливает.

[identity profile] permea-kra.livejournal.com 2010-09-30 11:31 am (UTC)(link)
Ребе, пользуйте кошерную генту.

[identity profile] dimitrykakadu.livejournal.com 2010-10-03 08:06 am (UTC)(link)
Такая проблема в винде будет невозможна, если вся винда перейдет на .NET. Там gac довольно по-умному устроен, и мне кажется, что с ним ад dll невозможен.