J'ai eu le même problème mais malgré les réponses ci-dessus, j'ai fini par trouver une solution personnalisée et j'aimerais la partager avec vous.
Tout d'abord, j'ai créé le environment.iss
avec 2 méthodes - l'une pour ajouter le chemin d'accès au fichier d'environnement Chemin d'accès et une seconde pour la supprimer :
[Code]
const EnvironmentKey = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
procedure EnvAddPath(Path: string);
var
Paths: string;
begin
{ Retrieve current path (use empty string if entry not exists) }
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths)
then Paths := '';
{ Skip if string already found in path }
if Pos(';' + Uppercase(Path) + ';', ';' + Uppercase(Paths) + ';') > 0 then exit;
{ App string to the end of the path variable }
Paths := Paths + ';'+ Path +';'
{ Overwrite (or create if missing) path environment variable }
if RegWriteStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths)
then Log(Format('The [%s] added to PATH: [%s]', [Path, Paths]))
else Log(Format('Error while adding the [%s] to PATH: [%s]', [Path, Paths]));
end;
procedure EnvRemovePath(Path: string);
var
Paths: string;
P: Integer;
begin
{ Skip if registry entry not exists }
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths) then
exit;
{ Skip if string not found in path }
P := Pos(';' + Uppercase(Path) + ';', ';' + Uppercase(Paths) + ';');
if P = 0 then exit;
{ Update path variable }
Delete(Paths, P - 1, Length(Path) + 1);
{ Overwrite path environment variable }
if RegWriteStringValue(HKEY_LOCAL_MACHINE, EnvironmentKey, 'Path', Paths)
then Log(Format('The [%s] removed from PATH: [%s]', [Path, Paths]))
else Log(Format('Error while removing the [%s] from PATH: [%s]', [Path, Paths]));
end;
Référence : RegQueryStringValue
, RegWriteStringValue
Maintenant, dans le fichier principal .iss, je pourrais inclure ce fichier et écouter les deux événements (pour en savoir plus sur les événements, consultez le site Web de la Commission européenne). Fonctions des événements dans la documentation), CurStepChanged
pour ajouter le chemin après l'installation et CurUninstallStepChanged
pour le supprimer lorsque l'utilisateur désinstalle une application. Dans l'exemple ci-dessous script ajoutez/supprimez le fichier bin
(relatif au répertoire d'installation) :
#include "environment.iss"
[Setup]
ChangesEnvironment=true
; More options in setup section as well as other sections like Files, Components, Tasks...
[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall
then EnvAddPath(ExpandConstant('{app}') +'\bin');
end;
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall
then EnvRemovePath(ExpandConstant('{app}') +'\bin');
end;
Référence : ExpandConstant
Note 1 : Installer l'étape ajouter le chemin une seule fois (assure la répétitivité de l'installation).
Note #2 : L'étape de désinstallation ne supprime qu'une seule occurrence du chemin de la variable.
Bonus : Étape d'installation avec case à cocher "Ajouter à la variable PATH" .
Pour ajouter une étape d'installation avec une case à cocher "Ajouter à la variable PATH" définir une nouvelle tâche dans [Tasks]
(cochée par défaut) :
[Tasks]
Name: envPath; Description: "Add to PATH variable"
Ensuite, vous pouvez le vérifier CurStepChanged
événement :
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) and IsTaskSelected('envPath')
then EnvAddPath(ExpandConstant('{app}') +'\bin');
end;