我試圖瞭解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