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] oldmann.livejournal.com 2010-09-29 05:44 pm (UTC)(link)
именно такими повадками создаётся dll Hell.

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

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

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