Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Запуск Windows Installer из приложения
avtor
сообщение 22.05.2008 - 11:35

Постоялец форума
*****

Группа: Участник
Сообщений: 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);

Однако в ответ получаю сообщение: "Не удается открыть пакет установки".

Что надо изменить в моем коде, чтобы функция заработала?
Перейти в начало страницы
 
+Цитировать сообщение
Akina
сообщение 22.05.2008 - 12:01
Частый гость
***

Группа: Участник
Сообщений: 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);
Перейти в начало страницы
 
+Цитировать сообщение
gormih
сообщение 22.05.2008 - 13:06

* Не Злой *
*****
орден I степениорден II степени
Группа: Участник
Сообщений: 912
Регистрация: 6.12.2005
Пользователь №: 10925


Цитата(avtor @ 22.05.2008 - 12:35) *
Проблема с интерпретатором Перл - его файл имеет расширение .msi.

Что надо изменить в моем коде, чтобы функция заработала?

Может не стоит вобще заморачиваться с msi? Интерпретатор Perl - это просто набор файлов в c:\perl имхо ... может их просто распаковать? Или проблемы с созданием ярлыков и прописываением директорий path?
Перейти в начало страницы
 
+Цитировать сообщение
avtor
сообщение 22.05.2008 - 14:15

Постоялец форума
*****

Группа: Участник
Сообщений: 978
Регистрация: 15.04.2004
Пользователь №: 3224


Цитата(Akina @ 22.05.2008 - 13:01) *
А у вас вообще такой есть - 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);
Пробовал - предложенный вариант не работает. msiexec.exe у меня есть именно там, куда указан путь.

Цитата(gormih @ 22.05.2008 - 14:06) *
Может не стоит вобще заморачиваться с msi? Интерпретатор Perl - это просто набор файлов в c:\perl имхо ... может их просто распаковать? Или проблемы с созданием ярлыков и прописываением директорий path?

Можно и так, но ситуация такова, что сделать это будет в несколько раз сложнее и дольше. Почему - долго объснять.
Так что нужно решение с вызовом функции, запускающей дочерний процесс.

Сообщение отредактировано avtor - 22.05.2008 - 14:17
Перейти в начало страницы
 
+Цитировать сообщение
avtor
сообщение 23.05.2008 - 14:46

Постоялец форума
*****

Группа: Участник
Сообщений: 978
Регистрация: 15.04.2004
Пользователь №: 3224


Проблема решена.
Перейти в начало страницы
 
+Цитировать сообщение
Akina
сообщение 23.05.2008 - 15:25
Частый гость
***

Группа: Участник
Сообщений: 204
Регистрация: 30.05.2005
Пользователь №: 8240


Цитата(avtor @ 23.05.2008 - 15:46) *
Проблема решена.

Ну так поделись решением. Может, пригодится кому...
Перейти в начало страницы
 
+Цитировать сообщение
avtor
сообщение 23.05.2008 - 17:07

Постоялец форума
*****

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 24.04.2024 - 01:40