【发布时间】:2010-10-15 01:25:54
【问题描述】:
我正在使用 tomcat5.0.28 windows installer ,它停在进度条的中间。 最后一条消息“使用 jvm:c:\java\j2sdk1.4.2_19\” 我等了很久,好像卡住了,我要杀掉进程。
我使用进程资源管理器来检查进程。我找到了一个tomcat安装程序创建的子进程,我检查了这个进程的属性,发现命令行是:
C:\TEMP\nse305.tmp\ns306.tmp "C:\Program Files\Apache Software Foundation\Tomcat5.0\bin\tomcat5.exe" //IS//Tomcat5 -- DisplayName "Apache Tomcat" --Description "Apache Tomcat 5.0 Server -http://jakarta.apache.org/tomcat/" --LogPath "C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs" --Install " C:\Program Files\Apache Software Foundation\Tomcat 5.0\bin\tomcat5.exe" --Jvm "$2"'
我复制了这个长命令行,并尝试在 cmd windows 中运行它,它显示一些 tomcat 安装服务消息,然后它冻结,进程根本不返回。
我认为是问题所在,这个子进程不返回,阻止了 tomcat 的安装。
我下载了 tomcat5.0.28 源代码并转到 tomcat5.nsi 文件。(安装脚本文件),发现它正在尝试运行:
nsExec::ExecToLog '"$INSTDIR\bin\tomcat5.exe" //IS//Tomcat5 --DisplayName "Apache Tomcat" --Description "Apache Tomcat @VERSION@ Server - @987654321 @" --LogPath "$INSTDIR\logs" --Install "$INSTDIR\bin\tomcat5.exe" --Jvm "$2"'
看起来安装程序使用 nsExec,一个运行命令的库。
我找到了C:\TEMP\nse305.tmp\ns306.tmp,在同一个文件夹下,还有一个nsExec.dll文件。 我将 ns306.tmp 与 nsExec.dll 进行了比较。它们之间有一点区别,只有几个字节,99%是一样的,所以我认为这个tmp文件实际上是nsExec.dll的变种。
我猜是 nsis 引擎创建了这个临时文件夹和临时文件,并用它来运行命令行,我不清楚 NSIS 引擎和 NsExec 是如何工作的,但我认为他们这次不能很好地工作我的电脑,可能是我电脑的问题。
但是为什么这个过程永远不会返回?谁能给我一点线索?
(我也试过运行tomcat6.0安装程序,效果很好,没问题)
【问题讨论】: