Но учитывая теперешний зоопарк ОС, технологий совместимости 32/64, попыток решения dll хелл, и вообще постижения Дао от МС, деплоймент этого runtime становится очень непростым.
Он, рантайм 8-ой версии, не идет, пока, в поставки никакх ОС - и Висте его тоже нет(по меньшей мере до SP).
Первое - для правильной установки, как это рекомендует МС, нужны права Администратора. А для установки на win2k до SP1 - обновление инсталятора МС до 3.1
Для интеграции этого redist себе в инсталятор - нужно делать msi инсталяторы, создание которых в корректном виде не самое простое занятие, для котрого хороших
свободных инструментов вроде как и нет, и опять таки необходимы права администратора.
В принципе на первый вгляд проблем быть не должно - что стоит поставить этот рантайм,
когда разворачивается сервер СУБД. Но тем, кто пытается распространять shareware системы, особенно с FB embeded, приходится хуже - необходимо тянуть этот рантайм со своим приложением.
Есть три пути его поставки:
- Официальный.
Устанавливаем инсталятором от MS и все работает. Не подходит, если нет гарантии наличия админских прав у пользователей, наличия Windows Installer 3.0 or later, portable решения. - Экстенсивный.
Поставляем со своим приложением просто необходимые бинарники рантайма. Так делает, впрочем, большинство софта - стоит только поискать msvcr80.dll по жесткому диску :)). Но, поставлять нужно ТРИ копии рантайма, одну для работы самого fbembed, вторую в каталоге intl для fbintl и третью в для подключаемых функций в каталоге udf. - Хитро-экстенсивный.
Пользуясь текстовой природой манифестов, в каталогах intl и udf оставить только манифест, с измененными путями к файлам вида:
<file name="..\msvcr80.dll">
<file name="..\msvcp80.dll">
ВАЖНО, в таком случае указать в манифесте своего приложения зависимость от Microsoft.VC80.CRT.
такой манифест представляет собой текстовый файл <FullAppName>.manifest с содержимым:<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Этот манифест можно включить в ресурсы самого приложения, см. например
Ссылки:
- Microsoft Visual C++ 2005 Redistributable Package (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=en - http://www.ibase.ru/fb21instfaq.htm
- http://delphi.about.com/library/bluc/text/uc111601a.htm
5 комментариев:
> для установки на win2k до SP1 - обновление инсталятора МС до 3.1
На W2K рантайм можно ставить как и раньше - копированием dll в system32
Сделал все как написано у вас в статье, но к сожалению не заработало, может я что-то не понимаю, но пробовал двумя методами, кидал библиотеки рантайма в папки intl и udf, не сработало, в логе пишет что не может загрузить fbintl.dll. Та же ситуация при создании в этих папках манифеста, манифесту присвоено имя Имя_программы.exe.manifest. Сама база создана с полями в кодировке WIN1251. В чем еще может быть проблема?
Сейчас(начиная с 2.1.2), спасибо Владу, проблема решена системно - FB достаточно рантайма, который лежит рядом с fbembed.dll.
Если все ж интересна причина вашей проблемы - распишите точное содержимое каталогов и тексты манифестов, подозреваю что какую-то мелочь все же упускали(манифесты рантайма, к примеру, в каталоги копировали?)
Вы правы, манифесты рантайма не скопировал в папки, по этому и не помогало. Спасибо большое за подсказку, сам бы наверное еще долго разбирался :), а вообще имеет смысл перейти на версию 2.1.2 пожалй :)
Однозначно стоит - релиз не за горами, а несколько неприятных вещей там поправлено.
Ну и загрузка рантайма многого стоит :)
Отправить комментарий