Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Inno Setup: in eigener Function Wert aus [Components] auswerten (https://www.delphipraxis.net/210334-inno-setup-eigener-function-wert-aus-%5Bcomponents%5D-auswerten.html)

Beichtvater 7. Apr 2022 11:37


Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Hallo werte Progger,
ich stehe vor der Herausforderung, abhängig von einer Auswahl des Bedieners eine x64er Installation zu einer x86er zu ändern:
Ein Programm von mir liegt als x86 und x64er Version vor. Eine DLL ebenso, eine andere aber nur als x86
Prog: x86 und x64 ("MyProg-x86.exe" und "MyProg-x64.exe")
DLL1: x86 und x64 ("dll1-x86.dll" und "dll1-x64.dll")
DLL2: x86 (nur als "dll2-x86.dll")

Nun soll das Setup bei der Auswahl der DLL2 die 32bit-Linie installieren, wenn aber nur die DLL1 gewählt ist, soll je nach BS entweder alles als 32Bit oder als 64Bit installiert werden.
Im Grunde genommen müsste es unterem Code ähnlich sein.

Code:
[Setup]
ArchitecturesInstallIn64BitMode=x64

[.CODE]
function x64isok (): Boolean;
begin
  result:=Is64BitInstallMode and not dll2;
end;

[Types]
Name: "full"; Description: "vollständig"
Name: "custom"; Description: "benutzerdefiniert"; Flags: iscustom

[Components]
Name: "program"; Description: "Hauptprogramm"; Types: full custom; Flags: fixed
Name: "dll1"; Description: "DLL1"; Types: full custom;
Name: "dll2"; Description: "DLL2"; Types: full custom;

[Files]
Source: "MyProg-x64.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: x64isok
Source: "MyProg-x86.exe"; DestDir: "{app}"; DestName: "MyProg.exe"; Check: not x64isok
Source: "dll1-x64.dll"; DestDir: "{app}"; DestName: "DLL1.dll"; components: dll1; Check: x64isok
Source: "dll1-x86.dll"; DestDir: "{app}"; DestName: "DLL1.dll"; components: dll1; Check: not x64isok
Source: "dll2-x86.dll"; DestDir: "{app}"; DestName: "DLL2.dll"; components: dll2;
Nur meckert Inno Setup die function "x64isok" an.
Zitat:

Zitat von Compiler Error
Unknown identifier 'dll2'

Wie muss das Installationsscript richtig lauten? Irgendwie finde ich keine Infos zu dem Syntax der Funktionen. :(
Ich hoffe, einer von euch kann mir da auf die Sprünge helfen.
Danke schon einmal im Vorfeld.

([.CODE] ist im Original ohne den Punkt, den habe ich nur wegen des Parsers hier eingefügt)

Da wir gerade dabei sind, noch eine Frage:
bei der Funktion
Code:
function ProgDir(Param: String): String;
Var P : String;
begin
  P := ExpandConstant('{app}'+'\Exe');
  Result:= P;
End;

[Dirs]
Name: "{code:ProgDir}"
muss ich zwingend einen Parameter (Param) übergeben, der aber nicht benutzt und leer ist. Wie kann ich dies verhindern?

TigerLilly 7. Apr 2022 12:58

AW: Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Inno meckert, weil ddl2 kein Pascalbezeichner ist + hier nicht definiert ist. Ich hab´s nicht im Kopf, aber es muss was Ähnliches wie das ExpandConstant sein, damit kannst du im Pascal-Teil auf Variablen von Inno zugreifen. Schasu mal hier
https://jrsoftware.org/ishelp/
unter ScriptedConstants.

Uwe Raabe 7. Apr 2022 13:55

AW: Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Zitat:

Zitat von Beichtvater (Beitrag 1504384)
Wie muss das Installationsscript richtig lauten? Irgendwie finde ich keine Infos zu dem Syntax der Funktionen. :(

Die passende Funktion heißt WizardIsComponentSelected.

Uwe Raabe 7. Apr 2022 14:07

AW: Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Zitat:

Zitat von Beichtvater (Beitrag 1504384)
Da wir gerade dabei sind, noch eine Frage:
bei der Funktion
Code:
function ProgDir(Param: String): String;
Var P : String;
begin
  P := ExpandConstant('{app}'+'\Exe');
  Result:= P;
End;

[Dirs]
Name: "{code:ProgDir}"
muss ich zwingend einen Parameter (Param) übergeben, der aber nicht benutzt und leer ist. Wie kann ich dies verhindern?

Kannst du nicht:
Zitat:

The called function must have 1 String parameter named Param, and must return a String or a Boolean value depending on where the constant is used.

Beichtvater 7. Apr 2022 14:22

AW: Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1504392)
Die passende Funktion heißt WizardIsComponentSelected.

Perfekt, vielen Dank.
Kaum macht man's richtig, geht's auch 8-)

Das mit dem "(Param: String)" war eh nur eine Schönheitssache, es funktioniert ja schon lange auch so...

Andreas13 7. Apr 2022 14:39

AW: Inno Setup: in eigener Function Wert aus [Components] auswerten
 
Zitat:

Zitat von Beichtvater (Beitrag 1504384)
([.CODE] ist im Original ohne den Punkt, den habe ich nur wegen des Parsers hier eingefügt)

Du kannst [CODE] schreiben, indem Du es zwischen [noparse] ... [/noparse] schreibst: ----> [noparse][CODE][/noparse]. Ist zwar etwas umständlich, aber dadurch wird das Parsen unterbunden und es sieht etwas schöner aus. Was man nicht alles für die Optik machen muß...:-D
Grüße, Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz