沒想到這個問題今天在Windows Server 2003上又碰上了,為了幫客戶升級Tomcat到新的版本5.5.26,想說順便升級JDK到6.0 Update 4,通常我都是用Windows Installer安裝方式並勾選將Tomcat安裝成Service,結果安裝完成居然無法啟動,趕緊設定了JAVA_HOME及CATALINA_HOME和PATH參數都無效,乾脆改裝Tomcat 6.0.16,也是一樣起不來,火了

,全部移除重新開機又重裝也不行,檢查了一下Tomcat的logs目錄下,有一個jakarta_service_20080214.log的log檔,裡面的訊息如下:
[2008-02-14 00:26:45] [info] Procrun (2.0.3.0) started
[2008-02-14 00:26:45] [info] Running Service...
[2008-02-14 00:26:45] [info] Starting service...
[2008-02-14 00:26:45] [174 javajni.c] [error] 找不到指定的模組。
[2008-02-14 00:26:45] [986 prunsrv.c] [error] Failed creating java C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
[2008-02-14 00:26:45] [1260 prunsrv.c] [error] ServiceStart returned 1
[2008-02-14 00:26:45] [info] Run service finished.
[2008-02-14 00:26:45] [info] Procrun finished.
想起了在安裝過程中Tomcat詢問了J2SE 5.0 JRE的目錄是不是它找到的那個,
這裡特別標明5.0難道說非得用JDK 5.0才行嗎?果然換成JDK 5.0 Update 14就一切正常了。
上網用Google找了一陣子終於找到了JDK 6.0+Tomcat 5.5/6.0在Windows上無法啟動問題的解法:
將JDK或JRE的bin目錄下的msvcr71.dll複製到Windows的system32目錄下或Tomcat的bin目錄下即可。
copy %JAVA_HOME%\bin\msvcr71.dll %SystemRoot%\system32
我個人是偏好複製到system32目錄,主要的考量是對於日後升級到別的Tomcat版本較為方便。
看到參考資料的最後一篇,才發現這個問題不只是我遇到而已,真是「江湖一點訣,說破不值錢」。
參考資料:
http://tw.myblog.yahoo.com/ttoduepxo/article?mid=786&next=694&l=f&fid=29
http://www.javaworld.com.tw/jute/post/view?bid=9&id=206538&sty=1&tpg=1&age=0
http://www.nabble.com/Tomcat-not-starting-to12554960.html
http://issues.apache.org/bugzilla/show_bug.cgi?id=41538