Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 12
Благодарности: 3

Профиль | Отправить PM | Цитировать


Serega,

Пример с батником - всего лишь для иллюстрации проблемы...

Настоящая задача - Установить Apache Http Server при помощи инсталлятора, созданного в Inno Setup'е. Зарегистрировать в качестве службы Windows, и запустить его по выбору пользователя по окончании инсталляции.

В качестве одного из дополнительных плагинов к Апачу - mod_wsgi (работает с программами написанными на языке Питон), который требует наличия в %PATH% пути к установленному в системе Питону, а конкретней - к python25.dll, или эта либа должна лежать рядом с httpd.exe.

По ряду причин - второе невозможно. Остается первое - дать понять демону апача где искать нужные библиотеки...

С помощью ChangesEnvironment=yes внутреннее, для инсталлятора, системное окружение, а в часности пути поиска - почему-то не обновляются. Если я правильно понимаю, все порожаемые инсталлятором процессы наследуют его системное окружение, и поэтому запускаются в старом, не обновленном системном окружении, со всеми вытекающими отсюда последствиями...

В моем случае при завершении работы инсталлятора апач не стартует, так как его модуль mod_wsgi не находит, свежеустановленную, но лежащую в другой папке python25.dll, хотя пути до нее в системе уже обновились. (что я надеюсь наглядно проиллюстрировал в примере выше).

Казалось бы все вышесказанное - СТРАШНЫЙ БАГ Inno Setup'а, который не позволяет решить поставленную задачу!!!

Но... Слава Великому и Ужасному ГУГЛЮ!!! Нашелся способ обойти проблему...

Воспользовавшись вот этим: Уважаемый тов. MK сообщил 21-02-2001 в 02:58, мне удалось запустить апача со всеми нужными ему и его модулям библиотеками, вне зависимости от системной переменной %PATH%.

Цитата:
... если исполняемый файл и используемые им библиотеки находятся в различных каталогах, то в раздел HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths нужно добавить ключ, соответствующий имени Вашей программы без пути, например BUZZER.EXE, и в этот ключ добавить:

1. значение по умолчанию, соответствующее полному имени файла (с путем)

2. строковый параметр Path, определяющий каталоги с файлами в формате задания переменной Path в autoexec.bat

Теперь при запуске программы значение Path будет добавлено к системной переменной Path ...
Каюсь, что до этого я не знал об этой возможности в Windows

Итак пример, показывающий решение проблемы, подобной моей :

Код: Выделить весь код
[Registry]
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueData: "{app}\python.exe"; Flags: uninsdeletekey  
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\python.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}\python"; Flags: uninsdeletekey  

[Run]
Filename: "python.exe"; WorkingDir: "{app}"; Description: Start {#MyAppName}; Components: a; Flags: shellexec postinstall waituntilterminated
Здесь python.exe лежит в {app}, а нужная ему либа в {app}\python
* При запуске вашей программы из секции [Run], флаг shellexec - включать обязательно! (без него не работает).
* Если запуск приложения происходит из секции [_Code] - обязательно используйте функцию shellexec('Open', ...).

Надеюсь мои изыскания будут полезны кому-нибудь ещё, ведь "умные люди" должны учиться на чужих ошибках...

Всем удачных инсталлов!
Сергей.

Последний раз редактировалось ADremLIN, 20-12-2009 в 22:01.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:40, 20-12-2009 | #726