2013-07-02 87 views
0

美好的一天,每個人。我分配了這個任務,其中包括創建簡單的僅用於installscript的項目,該項目應該有兩個窗口:第一個將提示用戶輸入路徑並在此指定位置創建文本文件,而第二個將提示輸入文本並保存任何用戶寫入進入這個文本文件。Installshield 2011:從一個窗口採取路徑,從第二個採取文本

有趣的一點是,我有一個小的installshield體驗(完成的教程......好吧,是的,就是這些),並且在上面有很少的編程經驗。據我瞭解,我應該首先創建兩個自定義對話框窗口(例如,通過從標準窗口克隆它們),然後使用函數創建.rul文件,確定每個文件的行爲。之後,將它們包含到主setup.rul和特定時間點的調用函數中。

問題是 - 什麼確切的對話框窗口/功能/時間點將是最好的這樣的任務?作爲參考,我搜索了「序列號驗證示例項目」,但說實話,它定製默認窗口的方式讓我更加困惑......所以,請任何人幫忙?謝謝。

回答

0

爲了將來的參考,這裏的工作解決方案。

問同樣的問題在的Flexera論壇,這裏就是我的了:

了我的頭頂部(而不使用InstallShield得心應手檢查)1) 創建的InstallScript項目,只接受所有的新項目嚮導中的默認值爲 ,除非你想添加本地化或 的東西。 2)您的描述意味着您不需要維護(修復,修改,卸載) 支持。如果正確,請轉至 Project \ Settings,然後在Maintenance選項卡上選擇'no uninstall or maintenance'。 3)您可以將代碼放在OnFirstUIBefore函數的頂部,然後調用Exit,以使其餘 默認代碼永遠不會執行,因爲您沒有安裝任何東西。

作爲InstallShield IDE的一部分,在開始菜單中(對於IS2012 Spring)是一個演示所有內置對話框的工具。您可以查看這些選項並選擇最適合您的情況的對話框。這聽起來像你想:

呼叫AskPath或SdAskDestPath(還有其他幾種可能性)

然後調用AskText並保存該字符串。

如果您需要將佈局或文本更改爲默認對話框,請在對話框視圖中查看 ,並選擇您在 之上選擇的對話框並對其進行編輯。 (如果您決定使用外觀確保你選擇的皮膚 你做任何對話框佈局的變化之前。)

然後做類似的WriteLine 例如http://kb.flexerasoftware.com/doc/Helpnet/installshield14langref/LangrefWriteLine_Example.htm

實際的WriteLine例子功能的功能體的東西原型是針對MSI定製的 行爲,這不是您想要的。忽略函數原型和 僅使用項目中的代碼在您已收集的路徑上創建文件,並編寫您收集的文本行。

然後調用Exit;

(非常感謝用戶phill_mn爲答案)

這裏是爲setup.rul代碼:

#include "ifx.h" 

function OnFirstUIBefore() 
    number nvFileHandle; 
    string svResult; 
    string szTargetPath, szFeatures; 
    BOOL bLicenseAccepted; 

begin 

AskPath ("Please choose a path where text file will be saved","c:\\",szTargetPath); 

MessageBox("File yourtext.txt wiil be created or overwritten at " +szTargetPath, INFORMATION); 

AskText ("Please enter some text to save into that file", "Text goes here", svResult); 

OpenFileMode (FILE_MODE_APPEND); 

    if (CreateFile (nvFileHandle, szTargetPath, "yourtext.txt") < 0) then 
     MessageBox ("Creating failed.", SEVERE); 
     abort; 
    else 

     if (WriteLine(nvFileHandle, svResult) < 0) then 
      MessageBox ("Writing failed.", SEVERE); 
     else 
      MessageBox ("Success.", INFORMATION); 
     endif; 

    endif; 

    CloseFile (nvFileHandle); 

Do(EXIT); 

    return 0; 
end;