Доброго времени суток.
Я работаю с InstallShield 12 версии. Стоит задача, чтобы в определенный момент (перед тем собственно как пользовтель нажмет кнопку Установить) программа-установки показала юзеру окошко, в котором вывела summary. Т.е. показала каталог, который он выбрал для установки, список компонентов, которые он собрался ставить и т.д. Конкретно проблема сейчас с тем, чтобы программно в скрипте IS получить список выбранных компонентов. Что я только не пробовал... Любой пример из самого хелпа к IS у меня не работает. Вот простой код:
#include "Ifx.h"
export prototype MyFunction(HWND);
function MyFunction(hMSI)
STRING szTitle, szMsg;
NUMBER listID, code;
begin
szTitle = "List MEDIA Features";
szMsg = "MEDIA contains the following top-level features:";
// Initialize the string list.
listID = ListCreate (STRINGLIST);
// Create a list of top-level features in the specified media.
code = FeatureListItems (MEDIA, "", listID);
// Display the list of top-level features.
SdShowInfoList (szTitle, szMsg, listID);
end;
В этом коде FeatureListItems всегда возвращает ошибку -132 ("The specified media cannot be found"). В примерах везде пишут, что в качестве первого параметра надо подставлять переменную MEDIA. Я собственно так и делаю, хотя так и не могу понять, что же это такое MEDIA? Отладчик показывает, что у меня MEDIA = "DATA".
Подскажите пожалуйста, что я не так делаю, как мне все же получить список компонентов, выбранных пользователем?
Спасибо.
Re: IS12: Как получить список выбранных компонентов?
От:
Аноним
Дата:
23.08.07 08:46
Оценка:
Позвольте уточнить проблему. возможно после этого кто-нибудь сможет мне помочь?
Я провел много различных экспериментов и выяснил следующее. В InstallShield 12 существует в общем-то два основных вида проектов (для меня по крайней мере). Это InstallScript Project и Basic MSI Project. Помимо предоставляемой функциональности главное отличие собственно состоит в том, что InstallScript Project использует для инсталляции движок самого Install Shield, а Basic MSI Project использует движок MSI. В ходе проведенных экспериментов я обнаружил следующее, что в такой процедуре
function Test()
NUMBER listID, code;
begin
// Initialize the string list.
listID = ListCreate (STRINGLIST);
// Create a list of top-level features in the specified media.
code = FeatureListItems (MEDIA, "", listID);
end;
функция FeatureListItems работает только, если это InstallScript Project. Если же она вызывается в Basic MSI Project, то происходит ошибка code = -132 (The specified media cannot be found). Причем это касается не только данной процедуры, а целой группы FeatureXXX процедур, которые в качестве первого параметра требуют указать szFeatureSource (Specifies the media name of the ...).
Подскажите пожалуйста, с чем это может быть связано??? Может такое быть, что данная группа функций вообще недоступна к использованию в Basic MSI Project? Однако я перерыл гору документации и в инете тоже искал и нигде ничего такого не нашел. Есть кто-нибудь, кому удавалось у Basic MSI Project вызвать какую-либо процедуру группы FeatureXXX, указав в качестве первого аргумента MEDIA и чтобы это отработало? Как все-таки в Basic MSI Project получить список выбранных компонентов?
Re: IS12: Как получить список выбранных компонентов?
Здравствуйте, Borg, Вы писали:
B>Доброго времени суток. B>Я работаю с InstallShield 12 версии.
... B>Подскажите пожалуйста, что я не так делаю, как мне все же получить список компонентов, выбранных пользователем? B>Спасибо.
во первых, разберитесь с терминами. То, что вы назвали компонентами, все-таки называется фичами(Features).
во вторых, сразу упростится поиск по форуму.
в третьих, постарайтесь не связываться с InstallScript вообще и направьте свои исследования в сторону Custom Actions.
Re[2]: IS12: Как получить список выбранных компонентов?
От:
Аноним
Дата:
23.08.07 12:09
Оценка:
Здравствуйте, 3tone, Вы писали:
3>Здравствуйте, Borg, Вы писали:
B>>Доброго времени суток. B>>Я работаю с InstallShield 12 версии. 3>... B>>Подскажите пожалуйста, что я не так делаю, как мне все же получить список компонентов, выбранных пользователем? B>>Спасибо. 3>во первых, разберитесь с терминами. То, что вы назвали компонентами, все-таки называется фичами(Features). 3>во вторых, сразу упростится поиск по форуму. 3>в третьих, постарайтесь не связываться с InstallScript вообще и направьте свои исследования в сторону Custom Actions.
Да,действительно вы правы, я напутал в терминах — замотался. Тем не менее поиск ответов на мой вопрос не дает. Я попробую еще раз сформулировать свою проблему:
Как в Install Shield 12 для проекта типа Basic MSI Project во время выполнения инсталляции (runtime) получить список features, которые выбрал пользователь?
Нужен какой-то аналог функции FeatureListItems, но только работающей для Basic MSI Project. Я слышал, что можно как-то напрямую в таблицы MSI лезть и доставать оттуда информацию, но у меня не получается. Буду признателен, если кто-нибудь покажет мне код такой функции на языке InstallScript.
Спасибо.
Re[2]: IS12: Как получить список выбранных компонентов?
От:
Аноним
Дата:
10.09.07 15:27
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Позвольте уточнить проблему. возможно после этого кто-нибудь сможет мне помочь?
Просто в ИШ можно использовать свои функции в проэкте ИнсталлШилд и только "обработанные" мсай функции в базовый мсай проэкте обычно в справке по каждой функции указываеться к какому проэкту она идет
Re[3]: IS12: Как получить список выбранных компонентов?
От:
Аноним
Дата:
10.09.07 15:34
Оценка:
Здравствуйте, Аноним, Вы писали:
А>
А>Как в Install Shield 12 для проекта типа Basic MSI Project во время выполнения инсталляции (runtime) получить список features, которые выбрал пользователь?
А>
А>Нужен какой-то аналог функции FeatureListItems, но только работающей для Basic MSI Project. Я слышал, что можно как-то напрямую в таблицы MSI лезть и доставать оттуда информацию, но у меня не получается. Буду признателен, если кто-нибудь покажет мне код такой функции на языке InstallScript.
А>Спасибо.
Есть функции MsiGetProperty и сет проперти с помощью них можно получить и изменить любую мсай свойство определенное в проперти менеджере
Если только надо что-б они выводились в сумарри экране то такой экран есть в стандартном наборе — надо посмотреть документацию на него
А вобще очень советую сначала посмотреть возможность реализации вашего вопроса через визуальный интерфейс потому что в ИШ скрипт — лучше не лезть
Re: IS12: Как получить список выбранных компонентов?
В Basic MSI проэктах эта функция не работает. Сам потратил много времени. Удалось решить эту проблему только следующим образом (напрямую читая из таблицы из MSI базы):
#include "Ifx.h"
export prototype GetAllFeatures(HWND);
function GetAllFeatures(hMSI)
HWND hDB, hViewlist;
HWND hViewprop, hRecordprop;
NUMBER nBuffer, nInstState, nActionState;
STRING svFeatureName, svPropvalue, AddLocal;
begin
hDB = MsiGetActiveDatabase(hMSI);
// open view into Feature table
MsiDatabaseOpenView(hDB,"SELECT * FROM `Feature`", hViewlist);
MsiViewExecute(hViewlist, NULL);
while (MsiViewFetch(hViewlist, hRecordprop) != ERROR_NO_MORE_ITEMS)
nBuffer = 256; // set size buffer
//в данном сучае svFeatureName отображает название фичи. дальше можно узнать action и т.д.
MsiRecordGetString(hRecordprop, 1, svFeatureName, nBuffer);
//.........................................................
endwhile;
MsiViewClose(hViewlist);
end;
Re[2]: IS12: Как получить список выбранных компонентов?
Здравствуйте, Yarik11, Вы писали:
Y>В Basic MSI проэктах эта функция не работает. Сам потратил много времени. Удалось решить эту проблему только следующим образом (напрямую читая из таблицы из MSI базы):
Большое спасибо, я попробую думаю такое решение меня устроит на все 100%