Я пытаюсь понять InstallShield (2009) / InstallScript на лету, потому что я изменяю чужой скрипт установки.
В одном из диалоговых окон во время процедуры установки ранее было одно текстовое поле, запрашивающее экземпляр SQL Server, предполагающее определенное имя базы данных. Сейчас я только что завершил усовершенствование, позволяющее вам выбрать любое имя базы данных, а не только имя по умолчанию, и мне нужно добавить поле в это диалоговое окно, чтобы пользователь мог ввести выбранное имя базы данных. Обезьяна понимает, обезьяна делает, просто создайте новый элемент управления, продублируйте и адаптируйте любую функциональность, которая была в форме для первого текстового поля - достаточно просто, верно?
Ммм ... проблема здесь. Кажется, что форма «SdShowDlgEdit1» - это общая вещь, которая поставляется с InstallShield и используется повсюду, где у вас есть диалоговое окно, для которого нужно одно текстовое поле. Измените эту форму, и она меняется везде, где она называется ... так что теперь у меня есть ложное 2-е текстовое поле, появляющееся на всем протяжении моей установки, где бы ни было одно текстовое поле раньше.
К сожалению. Отмените изменения и измените ссылку на «SdShowDlgEdit2», которая, как вы уже догадались, является стандартной формой InstallShield для диалогов, требующих 2 текстовых поля. Теперь это было бы здорово… за исключением того, что предыдущий разработчик дошел до меня и добавил кнопку «Обзор» в эту форму для места, где ему нужно второе текстовое поле для указания пути к папке. Мне не нужна эта кнопка «Обзор», и я не могу ее удалить.
Так что я думаю, почему бы мне не создать свою собственную форму и не попасть под чужие пальцы? Поэтому я клонирую форму, переименовываю новый экземпляр в «EnterDbDetails», удаляю кнопку «Обзор» и придаю форме правильный вид.
Затем я возвращаюсь в InstallScript, чтобы перенаправить на «EnterDbDetails», и обнаруживаю, что функция EzDefineDialog
требует, чтобы я передал «Resource ID» формы. Теперь, что это было снова ... 12018 ... здорово ... заполните все необходимые детали, скомпилируйте, соберите и приведите в движение. Выглядит прекрасно, все правильные значения по умолчанию заполнены в два текстовых поля - но эй! Почему там кнопка обзора? И почему текст на ярлыках не тот, который я установил?
Возвращаясь к InstallScript, проверьте идентификатор ресурса - выясняется, что исходный «SdShowDlgEdit2» также имеет идентификатор ресурса 12018. Что ж, это хорошо объясняет. Глупо, что InstallShield позволяет вам иметь две формы с одинаковым идентификатором, но безотносительно ... Итак, давайте вернемся к моей форме "EnterDbDetails" и изменим идентификатор ...
![enter image description here](https://i.stack.imgur.com/wGKHC.png)
... но свойство идентификатора ресурса доступно только для чтения! WTF
Так что теперь я не могу использовать ни одну из стандартных форм, и я не могу использовать пользовательскую форму, потому что она не позволит мне изменить идентификатор ресурса.
Я в тупике. Может кто-нибудь объяснить, как вы должны делать что-то подобное, что действительно должно быть самой простой вещью в мире?