From 80ad09f230acae80a6a7b3dce4b89b0204ca472e Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Wed, 24 Jul 2019 06:44:30 +0200 Subject: [PATCH] tools: installer: allow changing installation path Installation path can now be changed in a subsequent install, without uninstalling and logging out. The default value of the installation path is set to IDF_TOOLS_PATH environment variable, if it was already set by the previous installation, or by the user. Closes https://github.com/espressif/esp-idf/issues/3806 --- tools/windows/tool_setup/idf_tool_setup.iss | 3 ++- tools/windows/tool_setup/main.iss.inc | 22 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/tools/windows/tool_setup/idf_tool_setup.iss b/tools/windows/tool_setup/idf_tool_setup.iss index 7fd8b2f73..13869feae 100644 --- a/tools/windows/tool_setup/idf_tool_setup.iss +++ b/tools/windows/tool_setup/idf_tool_setup.iss @@ -35,6 +35,7 @@ AppPublisherURL={#MyAppURL} AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={%USERPROFILE}\.espressif +UsePreviousAppDir=no DirExistsWarning=no DefaultGroupName=ESP-IDF DisableProgramGroupPage=yes @@ -78,7 +79,7 @@ Filename: "{group}\{#IDFCmdExeShortcutFile}"; Flags: postinstall shellexec; Desc [Registry] Root: HKCU; Subkey: "Environment"; ValueType: string; ValueName: "IDF_TOOLS_PATH"; \ - ValueData: "{app}"; Flags: preservestringtype createvalueifdoesntexist; + ValueData: "{app}"; Flags: preservestringtype createvalueifdoesntexist uninsdeletevalue deletevalue; [Code] diff --git a/tools/windows/tool_setup/main.iss.inc b/tools/windows/tool_setup/main.iss.inc index 857f44879..a023f14d6 100644 --- a/tools/windows/tool_setup/main.iss.inc +++ b/tools/windows/tool_setup/main.iss.inc @@ -17,6 +17,23 @@ begin idpDownloadAfter(wpReady); end; +{ If IDF_TOOLS_PATH is set in the environment, + set the default installation directory accordingly. + Note: here we read IDF_TOOLS_PATH using GetEnv rather than + by getting it from registry, in case the user has set + IDF_TOOLS_PATH as a system environment variable manually. } + +procedure UpdateInstallDir(); +var + EnvToolsPath: String; +begin + EnvToolsPath := GetEnv('IDF_TOOLS_PATH'); + if EnvToolsPath <> '' then + begin + WizardForm.DirEdit.Text := EnvToolsPath; + end; +end; + function PreInstallSteps(CurPageID: Integer): Boolean; var @@ -75,6 +92,11 @@ begin Log('Setting PATH for this process: ' + EnvPath); SetEnvironmentVariable('PATH', EnvPath); + { Set IDF_TOOLS_PATH variable, in case it was set to a different value in the environment. + The installer will set the variable to the new value in the registry, but we also need the + new value to be visible to this process. } + SetEnvironmentVariable('IDF_TOOLS_PATH', ExpandConstant('{app}')) + { Log and clear PYTHONPATH variable, as it might point to libraries of another Python version} PythonLibPath := GetEnv('PYTHONPATH') Log('PYTHONPATH=' + PythonLibPath)