J'ai configuré le script ci-dessous pour demander à l'utilisateur une adresse IP dans le cadre de l'assistant d'installation, cette adresse est écrite dans un fichier de configuration auquel l'application se référera pour savoir où communiquer. avec. Toutefois, le service est créé avant la mise à jour du fichier de configuration (la section Run
se trouve avant CurStep = ssPostInstall
). La valeur par défaut a donc déjà été lue dans le fichier avant sa mise à jour. Cela signifie qu'un nouveau redémarrage manuel du service est actuellement requis pour que l'application communique.Exécuter le fichier d'installation après avoir remplacé le service
Je comprends qu'il est possible d'avoir la section Run
après le ssPostInstall
.
J'ai lu l'article Inno Setup: How to run a code procedure in Run section or before Run section? qui suggère que je peux utiliser le paramètre BeforeInstall:
dans le cadre de la commande run pour exécuter la procédure CurStepChanged
en premier. Cependant, ceci conduit à une erreur de
Fonction ou procédure requise 'CurStepChanged' trouvée mais pas avec un prototype compatible.
J'ai essayé aussi déplacer la ligne et commande run dessus de la section CurStepChanged
(pour correspondre à l'article mentionné aussi près que possible), mais encore retourné la même erreur.
Quelqu'un peut-il donner des conseils sur l'endroit où je vais mal avec la configuration?
[Code]
var
PrimaryServerPage: TInputQueryWizardPage;
function FileReplaceString(ReplaceString: string):boolean;
var
MyFile : TStrings;
MyText : string;
begin
Log('Replacing in file');
MyFile := TStringList.Create;
try
Result := true;
try
MyFile.LoadFromFile(ExpandConstant('{app}' + '\providers\print\win\print-provider.conf'));
Log('File loaded');
MyText := MyFile.Text;
{ Only save if text has been changed. }
if StringChangeEx(MyText, 'REPLACE_WITH_CUSTOMER_IP', ReplaceString, True) > 0 then
begin;
Log('IP address inserted');
MyFile.Text := MyText;
MyFile.SaveToFile(ExpandConstant('{app}' + '\providers\print\win\print-provider.conf'));
Log('File saved');
end;
except
Result := false;
end;
finally
MyFile.Free;
end;
Result := True;
end;
procedure InitializeWizard;
begin
PrimaryServerPage :=
CreateInputQueryPage(
wpWelcome, 'Application Server Details', 'Where is installed?',
'Please specify the IP address or hostname of your ' +
'Primary Application Server, then click Next.');
PrimaryServerPage.Add('Primary Application Server IP/Hostname:', False);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
Log('File installed, replacing IP address');
FileReplaceString(PrimaryServerPage.Values[0]);
end;
end;
[run]
Filename: {sys}\sc.exe; Parameters: "create PCPrintProvider start= auto binPath= ""{app}\providers\print\win\pc-print.exe PCPrintProvider"" depend= Spooler" ; Flags: runhidden ; BeforeInstall: CurStepChanged
Filename: {sys}\sc.exe; Parameters: "start PCPrintProvider" ; Flags: runhidden ; BeforeInstall: CurStepChanged
Avez-vous essayez d'utiliser ** Check ** param dans la section [run]? –