2016-11-22 105 views
0

我想讀取Windows註冊表,所以我的應用更新可以檢索先前保存的instalation路徑作爲它的DefaultDirName。Inno Setup - 定義裏面的默認路徑[code]

我讀的地方,我要調用一個函數,如:

DefaultDirName="{code:GetPath}" 

的問題是,我需要定義一個默認路徑,在情況下,函數沒有找到以前的一個。例如,'C:\ MyPath'。所以我這樣做:

[Code] 
function GetPath(Value: String): String; 
var 
    OrigPath: string; 
begin 
    Result := '{sd}\MyPath'; 
    if RegQueryStringValue(HKCU, 'Software\MyApp', 'PathExec', OrigPath) then 
    Result := OrigPath; 
end; 

這是行不通的。當我運行安裝程序時,在目標目錄對話框中,我逐字地獲得了「C:\ PathOfMySetup \ {sd} \ MyPath」,而不是「C:\ MyPath」。

爲了在系統驅動器上創建「MyPath」,我應該在第一個「Result:=」行寫什麼?

謝謝。

+0

哪有爲您的應用'HKCU'註冊表項,如果你只安裝應用程序? –

+0

是不是第一個結果的目的,作爲默認?如果RegQueryStringValue未能找到該鍵,該函數將返回我的C:\ MyPath來填充目錄對話框,對吧? – mehrlich

+0

但是'DefaultDirName'是新安裝的默認安裝路徑。重新安裝/升級時,不使用該值(默認情況下)。所以你的代碼實際上對我沒有意義。你會用簡單的'DefaultDirName = {sd} \ MyPath'得到相同的行爲。 –

回答

0

帕斯卡爾腳本中的常量沒有神奇地擴展。你必須明確地擴大他們使用ExpandConstant function

Result := ExpandConstant('{sd}\MyPath'); 
+0

謝謝!這解決了問題。 – mehrlich