我使用Inno Setup为我制作的应用创建了一个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
答案 0 :(得分:0)
我猜安装程序不会为您修改PATH,因此npm不会作为命令别名。如果通过使用可执行文件的绝对路径来调用npm,它应该按预期工作。
答案 1 :(得分:0)
如果批处理文件在安装程序完成后仍然有效,则其中一个子安装程序可能会将npm
添加到PATH
环境变量中。但是对环境的更改不会自动应用于现有进程(包括Inno安装程序本身)及其子进程(包括从Inno安装程序安装程序执行的批处理文件),仅适用于新进程。
在运行批处理文件之前,您必须显式重新加载环境。
[Run]
Filename: "{tmp}\setup.bat"; BeforeInstall: RefreshEnvironment
RefreshEnvironment
实施的位置如下:
Environment variable not recognized [not available] for [Run] programs in Inno Setup
或者您当然可以在批处理文件中使用绝对路径。但为此,您必须根据安装位置动态生成批处理文件。
或者从npm
目录运行批处理文件。请使用WorkingDir
parameter。