首页 > 代码库 > INNO SETUP 读取可变注册表路径的问题

INNO SETUP 读取可变注册表路径的问题

;INNO 读取可变注册表路径的问题


;问题:
;我想自动为 FireFox 安装上 Real 的 Mozilla 插件~但是它的路径存放在"HKEY_CURRENT_USER\Software\Mozilla\Mozilla Firefox\1.5 (zh-CN)\Main" Install Directory 下~中间的 1.5 (zh-CN) 会随版本和语言不同而变化怎么样才能忽略中间的 1.5 (Zh-cn) 直接读取下级子键 Main 下的内容呢?<!--QuoteEnd--><!--QuoteEEnd-->

;答案:
;请参考以下示例。

[Setup]
AppName=我的程序
AppVerName=我的程序 版本 1.5
DefaultDirName={pf}\我的程序
DefaultGroupName=我的程序

[Files]
;Source: MyProg.exe; DestDir: {app}
;Source: MyProg.hlp; DestDir: {code:getAFolder}
;Source: Readme.txt; DestDir: {app}

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: nl; MessagesFile: "compiler:Languages\Dutch.isl"
Name: de; MessagesFile: "compiler:Languages\German.isl"

[CustomMessages]
en.MyDescription=My description
en.MyAppName=My Program
en.MyAppVerName=My Program %1
en.ProgramFailed=本程序的%1版本已经安装,请卸载后再安装本程序. 安装程序将关闭.


nl.MyDescription=Mijn omschrijving
nl.MyAppName=Mijn programma
nl.MyAppVerName=Mijn programma %1
nl.ProgramFailed=本程序的%1版本已经安装,请卸载后再安装本程序. 安装程序将关闭.

de.MyAppName=Meine Anwendung
de.MyDescription=Meine Beschreibung
de.MyAppVerName=Meine Anwendung %1
de.ProgramFailed=本程序的%1版本已经安装,请卸载后再安装本程序. 安装程序将关闭.


[Code]
// Code added by gnatix
var
FirefoxInstallDir: string;

function getAFolder(default: String): String;
begin
if FirefoxInstallDir <> ‘‘ then            // if found
Result := FirefoxInstallDir
else
Result := ExpandConstant(‘{app}‘);       // if not found
end;

function GetInstalledVersion(): String;
var
InstalledVersion: String;
begin
InstalledVersion :=‘‘;
RegQueryStringValue(HKLM, ‘Software\BlueStacks‘, ‘Version‘, InstalledVersion);
Result := InstalledVersion;
end;

function InitializeSetup(): Boolean;
var
PrevVer: String;
S: String;
begin
PrevVer := GetInstalledVersion();
result := true;
if length(PrevVer) > 0 then begin

S := CustomMessage(‘ProgramFailed‘);
StringChange(S, ‘%1‘, PrevVer);

//如果发现程序已经安装过了
MsgBox (S, mbError, MB_OK);
result := false;
end;
end;

//procedure InitializeWizard();
//;var ;
//;SubKeyNames: TArrayOfString;
//i: Integer;
//begin
//FirefoxInstallDir:= ‘‘;
//if RegGetSubkeyNames(HKEY_CURRENT_USER, ‘Software\Mozilla\Firefox‘, SubKeyNames) then
//for i := 0 to GetArrayLength(SubKeyNames)-1 do
   //RegQueryStringValue(HKEY_CURRENT_USER, ‘Software\Mozilla\Firefox\‘ + SubKeyNames[i] +‘\Main‘, ‘Install Directory‘, FirefoxInstallDir);
//end;
 

INNO SETUP 读取可变注册表路径的问题