I'm trying to use iExpress to install dependencies on a small script that I've created on NodeJS.
The iExpress package simply installs the packages Node:
msiexec /i node.msi
Then runs a Post installation Batch to put the Javascript into a folder in the %UserProfile% folder.
The Post installation Batch is run with:
cmd /c post_install.bat
In the batch there is a line which isn't working:
npm install <dependency>
This doesn't seem to work immediately after the MSI install, but it will work the second time the .exe is run and NodeJS is installed.
So for whatever reason, either the MSI isn't setting the PATH variables until after the Batch is finished, or the iExpress Post Installation batch isn't getting set with the right environmental variables.
Anyone else experienced this problem, is there a work around or recommendation?
Should I put the installation of the MSI and the running of NPM into an installation script instead of using the Post Install?
The answer on What is the reason for '...' is not recognized as an internal or external command, operable program or batch file? explains where system and user environment variables are stored in Windows registry and how updates are made on them. It also explains that no process can modify the environment variables of an already running process and each new process inherits the current list of environment variables of its parent process.
So on starting IExpress installation process this installation process inherits the environment variables from its parent process which is usually Windows Explorer, but can be also a www browser or any other application.
The IExpress installation process runs
msiexec /i node.msi
which installs Node.js and most likely adds or modifies system or user environment variables in Windows registry. But those modifications on persistent stored environment variables for entire machine and current user are not automatically taken over to local environment variables list of already running IExpress installation process.Next is started by IExpress installation process a command process with command line
cmd /c post_install.bat
which gets by Windows a fresh copy of environment variables as currently set for IExpress installation process to work with.So whatever the Node.js installation process modified in Windows registry on the persistent stored system and user environment variables or on local environment variables of MSIEXEC process is not visible for the Windows command process executing the batch file
post_install.bat
.But
npm
batch file executed bypost_install.bat
depends on environment variables stored in Windows registry during Node.js installation process. For that reason it is necessary to update local environment variables with the system and user environment variables (in this order) before executingnpm
batch file.This can be done by extending
post_install.bat
with following commented code:This batch file reading system and user environment variables as currently stored in Windows registry and updating the local environment variables including local
PATH
works even on Windows XP / Windows Server 2003 although output of REG is different on Windows XP / Server 2003 in comparison to Windows Vista / Server 2008 and all later Windows versions.For understanding the used commands and how they work, open a command prompt window, execute there the following commands, and read entirely all help pages displayed for each command very carefully.
call /?
cd /?
echo /?
endlocal /?
for /?
if /?
reg /?
reg query /?
rem /?
set /?
setlocal /?