我已经使用Inno设置为我制作的应用程序创建了一个Windows安装程序。作为安装程序的一部分,我包括安装一些第三方应用程序,然后是批处理文件,以执行许多npm
命令可操作程序或批处理文件。
一切都可以安装,但是当批处理文件运行时,我会收到消息
'npm'未被认为是内部或外部命令
命令不运行,因此该应用不会打开。但是,如果我将所有内容保留原样,并且在安装后再次重新运行批处理文件,则命令执行并且应用程序正常。如何使批处理文件作为安装的一部分正确运行?
Inno设置Run
节
[Run]
Filename: "{tmp}Git-2.15.0-64-bit.exe"; Flags: waituntilterminated
Filename: "{tmp}rubyinstaller-2.3.3-x64.exe"; Flags: waituntilterminated
Filename: "{tmp}visualcppbuildtools_full.exe"; Flags: waituntilterminated
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi"; WorkingDir: {tmp}; Flags: waituntilterminated
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}node-v6.11.0-x64.msi"; WorkingDir: {tmp}; Flags: waituntilterminated
Filename: "{tmp}setup.bat";
Filename: "{app}{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: shellexec postinstall skipifsilent
批处理文件
cd C:/Users/%USERNAME%/Documents/myApp/api/
call npm install -g bower
call npm install -g grunt
call npm install -g grunt-cli
call npm config set msvs_version 2015 -global
call npm install bcrypt -save
call npm install
cd ../admin/
call npm install -g bower
call npm install -g grunt
call npm install -g grunt-cli
echo 1 | call gem install compass
call bower install
call npm install
如果批处理文件在安装程序完成后起作用,则子安装程序之一可能会将npm
添加到PATH
环境变量。但是,对环境的更改并不适用于现有过程(包括Inno设置安装程序本身)及其子流程(其中包括您从Inno设置安装程序执行的批处理文件),仅适用于新过程。
您必须在运行批处理文件之前明确重新加载环境。
[Run]
Filename: "{tmp}setup.bat"; BeforeInstall: RefreshEnvironment
其中 RefreshEnvironment
实现显示在:
中环境变量在Inno设置中未识别[不可用]
,或者您当然可以在批处理文件中使用绝对路径。但为此,您必须根据安装位置即时生成批处理文件。
或从npm
目录运行批处理文件。为此使用WorkingDir
参数。
我猜想安装程序不会为您修改路径,因此NPM不会被称为命令。如果您使用可执行文件的绝对路径调用NPM,则应按预期工作。