Я пытаюсь понять InstallShield (2009)/InstallScript на лету, потому что я модифицирую чужой скрипт установки.
В одном из диалогов во время процедуры установки ранее было одно текстовое поле, запрашивающее экземпляр SQL Server, предполагая определенное имя базы данных. Теперь я только что завершил усовершенствование, позволяющее вам выбрать любое имя базы данных, а не только имя по умолчанию, и мне нужно добавить поле в это диалоговое окно, чтобы пользователь мог ввести выбранное имя базы данных. Обезьяна видит, обезьяна делает, просто создайте новый элемент управления, продублируйте и адаптируйте любую функциональность формы для первого текстового поля — достаточно просто, верно?
Эм... тут проблема. Кажется, что форма «SdShowDlgEdit1» — это общая вещь, которая поставляется с InstallShield и используется везде, где у вас есть диалоговое окно, для которого требуется одно текстовое поле. Измените эту форму, и она изменится везде, где она называется... так что теперь у меня есть ложное второе текстовое поле, появляющееся повсюду в моей установке, где раньше было одно текстовое поле.
Упс. Отмените изменения и измените ссылку на «SdShowDlgEdit2», которая, как вы уже догадались, является стандартной формой InstallShield для диалогов, требующих 2 текстовых поля. Теперь это было бы здорово .... за исключением того, что предыдущий разработчик добрался до меня и добавил кнопку «Обзор» в эту форму для места, где ему нужно было второе текстовое поле, содержащее путь к папке. Мне не нужна эта кнопка "Обзор", и я не могу ее удалить.
Вот я и думаю, а почему бы мне не создать свою собственную форму и не попасть под чьи-то пальцы? Итак, я клонирую форму, переименовываю новый экземпляр в «EnterDbDetails», удаляю кнопку «Обзор» и придаю форме правильный вид.
Затем я возвращаюсь к InstallScript для перенаправления на «EnterDbDetails» и обнаруживаю, что функция EzDefineDialog
требует, чтобы я передал «ID ресурса» формы. Теперь, что это было снова... 12018... отлично... заполните все необходимые детали, скомпилируйте, соберите и запустите. Выглядит красиво, все правильные значения по умолчанию заполнены в двух текстовых полях — но эй! Почему там кнопка просмотра? И почему текст на этикетках не тот, что я поставил?
Вернитесь к InstallScript, проверьте идентификатор ресурса — оказывается, исходный «SdShowDlgEdit2» также имеет идентификатор ресурса 12018. Что ж, это прекрасно объясняет. Глупо, что InstallShield позволяет вам иметь две формы с одним и тем же идентификатором, но как бы там ни было... Итак, давайте вернемся к моей форме "EnterDbDetails" и изменим идентификатор...
... но свойство идентификатора ресурса доступно только для чтения! Что за хрень?
Так что теперь я не могу использовать ни одну из стандартных форм, и я не могу использовать пользовательскую форму, потому что она не позволяет мне изменить идентификатор ресурса.
Я в тупике. Может ли кто-нибудь объяснить, как вы должны делать что-то подобное, что действительно должно быть самой простой вещью в мире?