Wie verwenden Sie die Pascal Inno Setup ExpandConstant mit einer string variable?
Für eine installation Programm brauche ich zum erstellen von Ordner-links.
Für diese erstelle ich den Ziel-Ordner über die "[Dirs] " Sektion. Kein problem.
Dann, '[Code]' - Sektion, mit der Funktion 'CurStepChanged(ssPostInstall)', Las ich eine temporäre Datei installiert, um eine Liste der Ordner-links erstellen. Jede Zeile der Datei enthält einen Ziel-Ordner-Pfad-Namen, und einen link-Pfad-Namen... Mit Inno Setup Konstanten.
Jeder Wert wird gelesen und gespeichert, als 'String' - variable.
Wenn ich übergeben Sie die string-Variablen auf 'ExpandConstant(lLinkTarg)', bekomme ich einen internen Laufzeitfehler auf jeder die Namen von Konstanten.
Wenn ich copy paste den string-Inhalt zu einem 'ExpandConstant('{#gRepNasSvg}\UT{code:getProjetc}\Docs')' - Aufruf, dann funktioniert es...
Jede Andeutung über das, was ich falsch mache ?
Vielen Dank im Voraus.
L.
procedure CurStepChanged(CurStep: TSetupStep);
var
lFileName: String;
lLinkList: TArrayOfString;
lIndex: Integer;
lLinkLine: String;
lLinkName: String;
lLinkTarg: String;
lSepPos: Integer;
begin
//Après l'étape d'installation...
if CurStep = ssPostInstall then
begin
//Si le fichier listant les liens à créer existe...
lFileName := ExpandConstant('{tmp}') + '\' + ExpandConstant('{#gFicListeLiens}');
if FileExists(lFileName) then
begin
//Lecture du contenu du fichier.
LoadStringsFromFile(lFileName, lLinkList);
//Pour chaque ligne lue...
for lIndex := 0 to GetArrayLength(lLinkList) - 1 do
begin
//Lecture de la ligne.
lLinkLine := Trim(lLinkList[lIndex]);
//Si ce n'est pas un commentaire...
if (Length(lLinkLine) > 0) and (lLinkLine[1] <> ';') then
begin
//Recherche du séparateur.
lSepPos := Pos('>', lLinkLine);
if lSepPos > 0 then
begin
//Get target location.
lLinkTarg := Trim(Copy(lLinkLine, 1, lSepPos - 1));
MsgBox(lLinkTarg, mbInformation, MB_OK);
//NEXT LINE FAILS !
lLinkTarg := ExpandConstant(lLinkTarg) ;
MsgBox(lLinkTarg, mbInformation, MB_OK);
//Get link location.
lLinkName := Trim(Copy(lLinkLine, lSepPos + 1, Length(lLinkLine) - lSepPos));
MsgBox(lLinkName, mbInformation, MB_OK);
end
end
end
end
end
end;
Einige Sachen, die ich vergessen habe.
Link Beschreibung die variable ist von der form '{#gRepNasSvg}\UT{code:getProjetc}\Docs'...
Du musst angemeldet sein, um einen Kommentar abzugeben.
ExpandConstant('{tmp}\{#gFicListeLiens}');
(Sie sollten immer mindestens die
\
folgenden ein Verzeichnis Konstante in dem Aufruf ExpandConstant, und es gibt keinen Schaden in der darunter zusätzlichen text in es-vorausgesetzt es enthält keine der Sonderzeichen.)Was ist der Inhalt der Datei, die Sie versuchen zu Lesen, obwohl?
Beachten Sie, dass ExpandConstant nicht (und können) erweitern
{#var}
Stil-Konstanten, diese werden erweitert, beim kompilieren durch den Präprozessor und kann nicht erweitert werden zur Laufzeit. Es ist in der Regel auch schlechter Stil, zu versuchen, zu erweitern{code:...}
Konstanten aus [Code] Funktionen.Was ist der Grund für die Verwendung einer Datei in den ersten Platz? Ist es erzeugt, indem etwas bei der installation? Wenn nicht (oder auch wenn dem so ist, und Sie können die generation, die in das Skript, anstatt etwas extern), sollten Sie nur verwenden Sie ein array innerhalb des Codes.