2013-11-03 39 views
4
[Files] 
Source: "C:\MyProg.exe"; DestDir: "{app}"; BeforeInstall: GetHome(); Flags: ignoreversion 
[INI] 
Filename: "{myVarFromPascal}\.MyProg\settings.ini"; Section: "Settings"; Key: "sound"; String: "1"; Flags: createkeyifdoesntexist 
[Code] 
procedure GetHome(); 
    var 
    myPascalVar: String; 
begin 
    RegQueryStringValue(HKEY_CURRENT_USER, 'Volatile Environment','USERPROFILE', myPascalVar); 
    MsgBox('Value is "' + myPascalVar + '"', mbInformation, MB_OK); 
end; 

這些是我在INNO設置中的三個示例部分。我想在INI部分使用myPascalVar。我該怎麼做?如何在Inno Setup中使用Pascal變量?

+0

如果你只是想讀取註冊表,然後記下你可以使用相反,「{reg:...}」不變。儘管請注意,如果您以管理員身份運行,在安裝期間從HKCU讀取數據可能無法給您所期望的結果。 – Miral

回答

10

你需要改變你的變量是在全球範圍內,寫一個簡單的getter函數用於所謂的scripted constant

[Files] 
Source: "C:\MyProg.exe"; DestDir: "{app}"; BeforeInstall: GetHome; Flags: ignoreversion 

[INI] 
Filename: "{code:GetMyVar}\.MyProg\settings.ini"; Section: "Settings"; Key: "sound"; String: "1"; Flags: createkeyifdoesntexist 

[Code] 
var 
    myPascalVar: string; 

function GetMyVar(Value: string): string; 
begin 
    Result := myPascalVar; 
end; 

procedure GetHome; 
begin 
    RegQueryStringValue(HKEY_CURRENT_USER, 'Volatile Environment', 'USERPROFILE', myPascalVar); 
    MsgBox('Value is "' + myPascalVar + '"', mbInformation, MB_OK); 
end; 
相關問題