我正在尝试即时了解 InstallShield (2009)/InstallScript,因为我正在修改其他人的安装脚本。
安装过程中的其中一个对话框以前有一个文本框,要求 SQL Server 实例,假设某个数据库名称。现在,我刚刚完成了一项增强功能,使您可以选择任何数据库名称,而不仅仅是默认名称,并且我需要在此对话框中添加一个字段,以便用户可以输入选择的数据库名称。猴子看,猴子做,只需创建一个新控件并复制和调整表单为第一个文本框提供的任何功能 - 很容易,对吧?
嗯...这里有问题。似乎“SdShowDlgEdit1”表单是随 InstallShield 一起提供的通用东西,并且在任何需要一个文本框的对话框中都可以使用。更改该表单,它在任何地方都会更改它被称为...所以现在我有一个虚假的第二个文本框出现在我的安装中,之前有一个文本框。
哎呀。撤消更改,并更改对“SdShowDlgEdit2”的引用,这是 - 你猜对了 - InstallShield 需要 2 个文本框的对话框的标准形式。现在那太好了....除了以前的开发人员在我之前到达那里并在该表单中添加了一个“浏览”按钮,以便他需要第二个文本框来包含文件夹路径。我不想要那个“浏览”按钮,也不能删除它。
所以我想,为什么我不创建自己的自定义表单,而不是受到其他人的关注呢?所以我克隆了表单,将新实例重命名为“EnterDbDetails”,删除“浏览”按钮,使表单看起来恰到好处。
然后我回到 InstallScript 重定向到“EnterDbDetails”,发现该EzDefineDialog
函数需要我传入表单的“资源 ID”。现在又是什么...... 12018......太好了......填写所有必要的细节,编译,构建并试一试。看起来很可爱,所有正确的默认值都填充到两个文本框中 - 但是,嘿!为什么有浏览按钮?为什么标签上的文字不是我设置的?
回到 InstallScript,检查资源 ID - 原来的“SdShowDlgEdit2”也有一个资源 ID 12018。嗯,这很好地解释了这一点。愚蠢的是,InstallShield 允许您拥有两个具有相同 ID 的表单,但是无论如何......所以让我们回到我的“EnterDbDetails”表单并更改 ID......
...但资源标识符属性是只读的! 怎么回事?
所以现在我不能使用任何标准表单,也不能使用自定义表单,因为它不允许我更改资源 ID。
我难住了。谁能解释一下你应该如何做这样的事情,这真的应该是世界上最简单的事情吗?