2) wenn der String nicht in der Registry steht, dann expandierst du DefaultPath wobei DefaultPath = {code:GetRegistryPath} ist
Nein. DefaultPath ist hier leer. Da hätte man explizit einen Parameter übergeben müssen mit
[Setup]
DefaultDirName={code:GetRegistryPath|Parameter}
GetRegistryPath gibt also einen Leerstring zurück, worauf Innosetup wahrscheinlich das DefaultDirMane auf {app} setzen will, war wiederum zu diesem Zeitpunkt noch nicht bekannt ist.
Also mach entweder meine Lösung aus #23 oder so was:
[Files]
Source: "C:\Quelldatei"; DestDir: {code:GetRegistryPath};
[Code]
function GetRegistryPath(DefaultPath: string): string;
begin
if not RegQueryStringValue(...., result) then
Result := ExpandConstant('{app}'); // jetzt ist es ja bekannt
end;
Wobei man für die Ermittlung des Pfades aus der Registry noch eine funktionierende Lösung finden müsste, wie SneakyBagels schon gesagt hat.