我试图了解InstallShield(2009)/ InstallScript,因为我正在修改其他人的安装脚本。如何在InstallShield中创建自定义对话框?
之前的安装过程中的一个对话框上有一个文本框,要求SQL Server实例,假设某个数据库名称。现在我刚刚完成了一项增强功能,可以选择任何数据库名称,而不仅仅是缺省名称,而且我需要向该对话框添加一个字段,以便用户可以输入所选的数据库名称。猴子看到,猴子会做,只是做一个新的控制,并复制和适应形式为第一个文本框的任何功能 - 很容易,对吧?
嗯......问题在这里。看起来,“SdShowDlgEdit1”表单是一个随InstallShield一起提供的通用事物,并且在任何需要一个文本框的对话框中都可以使用它。改变这种形式,并且它在所有被调用的地方都会发生变化...所以现在我有一个虚假的第二个文本框出现在我的安装中,只要以前有一个文本框。
糟糕。撤消更改,并将引用更改为“SdShowDlgEdit2”,即您猜对它 - InstallShield的标准格式,用于需要2个文本框的对话框。现在,这将是伟大的....除了以前的开发人员在我之前到达那里,并添加一个“浏览”按钮到该窗体的地方,他需要第二个文本框包含文件夹路径。我不想要那个“浏览”按钮,我不能删除它。
所以我想,为什么我不创建自己的自定义形式,而不是得到任何人的脚趾?因此,我克隆了表单,将新实例重命名为“EnterDbDetails”,删除“浏览”按钮并使窗体看起来恰到好处。
然后我回到InstallScript中重定向到“EnterDbDetails”,并发现EzDefineDialog
函数要求我传入窗体的“资源ID”。现在又是什么...... 12018 ......很棒......填写所有必要的细节,编译,构建,并给它一个旋转。看起来很可爱,所有正确的默认值被填入两个文本框 - 但嘿!为什么浏览按钮在那里?为什么标签上的文字不是我设定的?
返回到InstallScript,检查资源ID - 原来的“SdShowDlgEdit2”也有一个资源ID 12018.那么,这很好地解释。愚蠢的InstallShield将允许你有两种形式使用相同的ID,但不管......所以,让我们回到我的“EnterDbDetails”的形式,改变ID ...
...但资源标识符属性是只读的! WTF?
因此,现在我不能使用任何标准格式,而且我也不能使用自定义格式,因为它不会让我更改资源ID。
我很难过。任何人都可以请解释你应该如何做这样的事情,这真的应该是世界上最简单的事情?
谢谢!可惜我不得不从头开始创建,并且无法复制以前的对话框。幸运的是,它并不复杂。 – 2012-03-04 08:40:58
这个答案容易受到链接腐烂的影响。 – 2015-07-28 18:46:56