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', ...).
Надеюсь мои изыскания будут полезны кому-нибудь ещё, ведь "умные люди" должны учиться на
чужих ошибках...
Всем удачных инсталлов!
Сергей.