思路请教,有好建议均有分(有难度)
先说一下环境:
小弟写了一个程序,目的通过手机短信上行至网关,接收后走socket流至指定服务器守候进程,对流数据包解析后,进行数据匹配,包体其中有一项需重启win2000 server操作系统上的一个tomcat进程
问题出现在重启win2000 server操作系统上的一个tomcat进程代码,tomcat我采用启动它的start.bat方法,启动代码如下:
Shell( "E:\tomcat\bin\start.bat ",1)
E:\tomcat\bin\start.bat这个文件,可以手动以鼠标方式运行成功,程序在先kill了tomcat进程后,再shell这个进程时,tomcat在桌面一闪就自己飞掉了,检查进程中也没有启动成功,检查bat文件发现,有虚目录存在, start.bat全文如下:
@echo off
if "%OS% " == "Windows_NT " setlocal
rem ---------------------------------------
rem Start script for the CATALINA Server
rem
rem $Id: startup.bat,v 1.5 2004/03/28 06:40:44 mturk Exp $
rem ---------------------------------------
rem Guess CATALINA_HOME if not defined
set CURRENT_DIR=%cd%
if not "%CATALINA_HOME% " == " " goto gotHome
set CATALINA_HOME=%CURRENT_DIR%
if exist "%CATALINA_HOME%\bin\catalina.bat " goto okHome
cd ..
set CATALINA_HOME=%cd%
cd CURRENT_DIR
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat " goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
set EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat
rem Check that target executable exists
if exist "%EXECUTABLE% " goto okExec
echo Cannot find %EXECUTABLE%
echo This file is needed to run this program
goto end
:okExec
rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if " "%1 " "== " " " " goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs
call "%EXECUTABLE% " start %CMD_LINE_ARGS%
:end
请教同事中C的高手,对方说有可能是运行代码时应将环境指定到bat所在的目录中,并说有85%可能,应是此问题,我在网上查了下,没任何方向,怎么在运行时将环境指定到bat所在的目录?是否通过环境变量中的path?vb中有类同于change_path这种的方法吗?有底层的api可以调用吗?tomcat还有其它方式启动吗?
Shell( "E:\tomcat\bin\start.bat ",1) 这种方法中是否可以加启动参数,能解决此问题吗?
我的另一种做法,已将bat放至win的启动组里,并改注册表,设为无密码直接重启操作系统,以win的重启动方式直接拉起进程,方法虽然可行,但收到socket包后,直接重启操作系统,则无法完成回包确认结果的短信下行方式
对于以上问题,请教高手给些好的思路,本人现在有点茫然,呵呵,有益者均给分,问题能解决,立刻结贴
[解决办法]
在你的vb程序中用chdrive、chdir改变缺省目录到start.bat所在的目录。
[解决办法]
在 Shell( "E:\tomcat\bin\start.bat ",1) 这句中传个路径(也就是“E:\tomcat\bin”)给bat,再在bat中用传进来的参数更改路径。写成:
Shell( "E:\tomcat\bin\start.bat E:\tomcat\bin ",1)
或者这样试试:
Shell( "cmd.exe E:\tomcat\bin\start.bat ", 1)
cmd.exe就是win2000以上系统的dos命令行程序。此时的路径应是win系统目录。
[解决办法]
不懂tomcat。
但如果是运行环境问题,可以通过lsftest() ( ) 所说的方法,或
sheet( "cd E:\tomcat\bin ")来试试看。