【发布时间】:2022-08-15 15:33:40
【问题描述】:
我正在为需要 Apache Tomcat 8 作为 Windows 服务的程序制作 NSIS 安装程序。 JAVA_HOME 在 NSIS 安装程序脚本中设置为环境变量,我已经制作了 Powershell 脚本文件来处理 Tomcat 特定变量(CATALINA_HOME, JvmMX, JvmArgs)并最终运行service.bat install。
当我独立运行以下 Powershell 脚本时(设置了 JAVA_HOME 环境变量)service.bat install 安装 Tomcat 服务,找到正确的JAVA_HOME 路径。但是,当它通过安装程序完成时,如下图所示,它会为 JAVA_HOME 和 JRE_HOME. 获得一个空路径
我是靠psExec.nsh插件执行Powershell脚本(${PowerShellExecFileLog})
我似乎无法找到发生这种情况的原因.. 任何帮助将不胜感激!
我唯一的猜测是它与 32 位/64 位有关。我确信我错了,所以请纠正我,但我的想法是:系统是 64 位,JAVA_HOME 环境变量是 64 位,但安装程序是 32 位,使 Powershell它的调用是 32 位的,因此 Powershell 无法检索 64 位环境变量。
以下是相关代码sn-ps:
[PowerShell Script -- Tomcat-Setup.ps1]
$PhysMemory=(Get-WmiObject -class \"cim_physicalmemory\" | Measure-Object -Property Capacity -Sum).Sum / 1024 / 1024 / 1024
$SERVICE_STARTUP_MODE=\"auto\"
if($PhysMemory -le 16) {
$JvmMX=2048
} elseif($PhysMemory -le 32) {
$JvmMX=4096
} else {
$JvmMX=8192
}
$JvmArgs=\"-Djavax.servlet.request.encoding=UTF-8;-Dfile.encoding=UTF-8;-XX:+HeapDumpOnOutOfMemoryError;-XX:+ExitOnOutOfMemoryError;-Dconf.home=$env:LGCDM_HOME\\conf\\service\"
$CATALINA_HOME=\"$env:LGCDM_HOME\\apache-tomcat\"
Set-Location $CATALINA_HOME
& .\\bin\\service.bat install LG_Tomcat
Set-Service -Name LG_Tomcat -StartupType Automatic -DisplayName LG_Tomcat
[NSIS Script]
Section \"MainSection\" SEC02
InitPluginsDir
${PowerShellExecFileLog} \"$INSTDIR\\Tomcat-Setup.ps1\"
SectionEnd
-
你是如何在 NSIS 中设置 JAVA_HOME 的?
-
@Anders 我直接在 Windows 注册表中写入 JAVA_HOME 值。确切的行如下:
${registry::Write} \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\" \"JAVA_HOME\" \"$INSTDIR\\amazon_jdk\\jdk11.0.12_7\" \"REG_EXPAND_SZ\" $R0
标签: java powershell tomcat nsis