В Installshield, какое событие лучше всего использовать для запуска приложений только при установке, а не при удалении или восстановлении? - PullRequest
0 голосов
/ 25 сентября 2008

Мы недавно вернулись к InstallShield 2008, откатывая нашу собственную установку. Итак, я все еще пытаюсь научиться этому.

Мы используем Firebird и USB-драйвер, поэтому мы не смогли найти хорошие решения для установки MSI. Итак, у нас есть строка cmd для автоматической установки firebird, а драйвер usb в основном без вывода сообщений.

Мы поместили этот код в обработчик событий DefaultFeatureInstalled. Это работает очень хорошо при первой установке. Но когда я делаю деинсталляцию, он пытается снова запустить установщик firebird, поэтому он должен снова отправлять событие DefaultFeatureInstalled.

Является ли их другое событие для использования, или есть способ определить, происходит ли его установка или удаление в событии DefaultFeatureInstalled?

Ответы [ 5 ]

1 голос
/ 30 сентября 2008

Крис, у меня были проблемы с тем, чтобы заставить MsiGetProperty работать вообще. Просто добавив код, который у вас есть

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

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

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

0 голосов
/ 09 октября 2008

Если вы используете MSI-проект InstallScript или InstallScript, вам нужно обработать событие OnFirstUIBefore. Он вызывается при первом запуске установщика. Когда установщик запускается снова, на его месте возникает событие OnMaintUIBefore.

0 голосов
/ 25 сентября 2008

Я делаю проект InstallScript.

Я дважды проверил событие, и я использую функцию DefaultFeature_Installed с подчеркиванием. Я искал в Интернете и на сайте IS и нашел упоминание об этом, но не определился. Я спросил здесь разработчика, который изначально перенес код на это событие, и она не может вспомнить, куда и зачем она переместила код на это событие.

Я посмотрю в MsiGetProperty сегодня утром. Спасибо за указатель.

0 голосов
/ 28 сентября 2008

Вы можете добавить этот код в событие DefaultFeature_Installed:

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

Примечание: имя функции чувствительно к регистру. Значение ISMSI_HANDLE является дескриптором механизма установки InstallShield. Если значение sRemove равно «ALL», что указывает на удаление, вы можете пропустить установку Firebird.

0 голосов
/ 25 сентября 2008

Существуют свойства MSI, на которые вы можете посмотреть, которые сообщат вам, установлен ли продукт, или происходит удаление. Свойство Installed будет иметь значение true, если продукт уже существует, поэтому вы можете использовать его в логическом выражении (например, Not Installed). Для свойства REMOVE будет установлено значение «ALL», если выполняется удаление. Возможно, вы сможете настроить логику установки Firebird на эти свойства, которые вы можете получить с помощью функции MsiGetProperty .

Примечание. Имена свойств означают разные вещи в зависимости от регистра, поэтому убедитесь, что вы используете регистры выше.

Я не смог найти никакой ссылки в справочной системе IS или Google на событие DefaultFeatureInstalled. Является ли ваш проект InstallShield Basic MSI или InstallScript?

...