InstallShield не предлагает способ сделать это напрямую. Этот диалог отображается setup.exe до того, как он запустит MSI, как только вызывается установщик Windows, он заблокирован в этом конкретном экземпляре. В зависимости от окна сообщения, которое вы хотите показать, вы можете сделать его частью MSI и показать его в начале в правильных ситуациях. Однако это не так, чтобы получить правильные результаты.
Простейшим подходом было бы ссылаться на свойство InstanceId
, так как это указывает, к какому экземпляру вы находитесь. Однако после установки и удаления нескольких экземпляров, следующая установка, которую вы устанавливаете, может не соответствовать числу, которое в настоящее время присутствует в системе.
Чтобы быть в полной мере, вы должны иметь аналогичные знания о других экземплярах, о которых знает setup.exe: он поддерживает список экземпляров с их кодами продуктов (и более), чтобы он мог определить, установлены ли они. Если ваш MSI имеет эту информацию, он также может обнаруживать другие MSI (возможно, через записи Major Upgrade, установленные только для обнаружения, ссылаясь на различные значения UpgradeCode
других ваших экземпляров).
В любом случае, как только вы определили приблизительный или точный счет, вы можете создать свое сообщение и либо показать его в диалоговом окне (например, поместив его в свойство, показанное на этикетке), либо показать его с вызовом MsiProcessMessage
.
yep, я просто хочу, чтобы это окно сообщения напоминало пользователю о том, что уже установлено 6 экземпляров. После того, как пользователь нажмет «ok» в этом окне сообщения, установка будет продолжена ... Какие подробности я должен предоставить? – zangw
@zangw, это правильные детали, но это не так просто реализовать на стороне MSI. Я обновил свой ответ, чтобы включить больше направлений. –