Запуск Windows Installer из приложения |
Здравствуйте, гость ( Вход | Регистрация )
Запуск Windows Installer из приложения |
22.05.2008 - 11:35
Вставить ник | Быстрая цитата | Сообщение
#1
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Есть приложение, написанное в С++Builder, которое автоматически устанавливает в Windows несколько программ: сервер Апач, интерпретатор Перл и др.
Проблема с интерпретатором Перл - его файл имеет расширение .msi. Соответственно, для его установки надо сначала вызвать программу Windows Installer, а потом передать в нее имя ActivePerl-5.8.6.811-MSWin32-x86-122208.msi. Ниже приведен фрагмент кода, с помощью которого пытаюсь выполнить это действие: spawnl (P_WAIT, "C:\\WINDOWS\\system32\\msiexec.exe", "C:\\Documents and Settings\\All Users\\Рабочий стол\\nw\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi", "/I", NULL); Однако в ответ получаю сообщение: "Не удается открыть пакет установки". Что надо изменить в моем коде, чтобы функция заработала? |
|
|
22.05.2008 - 12:01
Вставить ник | Быстрая цитата | Сообщение
#2
|
|
Частый гость Группа: Участник Сообщений: 204 Регистрация: 30.05.2005 Пользователь №: 8240 |
А у вас вообще такой есть - C:\WINDOWS\system32\msiexec.exe? у меня, например, нет, что не мешает MSI-шкам ставиться...
Попробуйте просто Код spawnl (P_WAIT, "C:\\Documents and Settings\\All Users\\Рабочий стол\\nw\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi", "/I", NULL);
|
|
|
22.05.2008 - 13:06
Вставить ник | Быстрая цитата | Сообщение
#3
|
|
* Не Злой * Группа: Участник Сообщений: 912 Регистрация: 6.12.2005 Пользователь №: 10925 |
Проблема с интерпретатором Перл - его файл имеет расширение .msi. Что надо изменить в моем коде, чтобы функция заработала? Может не стоит вобще заморачиваться с msi? Интерпретатор Perl - это просто набор файлов в c:\perl имхо ... может их просто распаковать? Или проблемы с созданием ярлыков и прописываением директорий path? |
|
|
22.05.2008 - 14:15
Вставить ник | Быстрая цитата | Сообщение
#4
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
А у вас вообще такой есть - C:\WINDOWS\system32\msiexec.exe? у меня, например, нет, что не мешает MSI-шкам ставиться... Пробовал - предложенный вариант не работает. msiexec.exe у меня есть именно там, куда указан путь.Попробуйте просто Код spawnl (P_WAIT, "C:\\Documents and Settings\\All Users\\Рабочий стол\\nw\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi", "/I", NULL); Может не стоит вобще заморачиваться с msi? Интерпретатор Perl - это просто набор файлов в c:\perl имхо ... может их просто распаковать? Или проблемы с созданием ярлыков и прописываением директорий path? Можно и так, но ситуация такова, что сделать это будет в несколько раз сложнее и дольше. Почему - долго объснять. Так что нужно решение с вызовом функции, запускающей дочерний процесс. Сообщение отредактировано avtor - 22.05.2008 - 14:17 |
|
|
23.05.2008 - 14:46
Вставить ник | Быстрая цитата | Сообщение
#5
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
Проблема решена.
|
|
|
23.05.2008 - 15:25
Вставить ник | Быстрая цитата | Сообщение
#6
|
|
Частый гость Группа: Участник Сообщений: 204 Регистрация: 30.05.2005 Пользователь №: 8240 |
|
|
|
23.05.2008 - 17:07
Вставить ник | Быстрая цитата | Сообщение
#7
|
|
Постоялец форума Группа: Участник Сообщений: 978 Регистрация: 15.04.2004 Пользователь №: 3224 |
spawnl (P_WAIT, "C:\\WINDOWS\\system32\\msiexec.exe", "C:\\WINDOWS\\system32\\msiexec.exe", "/i", "C:\\IKS\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi", NULL);
1. Должно быть дважды указано "C:\\WINDOWS\\system32\\msiexec.exe". По условиям работы функции spawnl в нее необходимо передать имя программы (в данном случае "C:\\WINDOWS\\system32\\msiexec.exe") и набор аргументов. Первым аргументом должен снова быть путь к программе (в данном случае опять же "C:\\WINDOWS\\system32\\msiexec.exe"). 2. /i - (второй аргумент) опция, указывающая, что запускается процесс инсталяции программы, путь которой указан в третьем аргументе (в данном случае "C:\\IKS\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi"). 3. В путях не должно быть пробелов (или вместо пробелов должны стоять символы, заменяющие пробелы). Поэтому путь "C:\\IKS\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi" - корректный, а "C:\\Documents and Settings\\All Users\\Рабочий стол\\nw\\PROGRAM\\ActivePerl-5.8.6.811-MSWin32-x86-122208.msi" - некорректный. Кстати, если зайти в папку C:\WINDOWS\system32 и дважды щелкнуть на ярлыке msiexec.exe, откроется окно, где будет дана справочная информация по запуску и опциям системы (правда, очень краткая). Сообщение отредактировано avtor - 23.05.2008 - 17:46 |
|
|
Текстовая версия | Сейчас: 24.04.2024 - 01:40 |