当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.net控制Tomcat启动关闭的实现方法

Asp.net控制Tomcat启动关闭的实现方法

2017年12月12日  | 移动技术网IT编程  | 我要评论

玩转无限恐怖,江北第一才子,极乐红粉天

一、场景
近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等1天它缓存过期后才生效。由于项目进度我们不可能将这个权限系统推翻重来。
  可行的方式是在管理员操作界面上增加权限系统重启按钮。这样客户在修改权限后可以很方便的重启tomcat。
二、技术分析
由于管理员系统是基于.net的bs方式。所以我们要能通过网页控制tomcat的关闭启动,并加载进管理员系统中。
  首先分析tomcat的启动方式。在tomcat6.0的bin目录下有两个批处理文件。startup.bat和shutdown.bat分别控制着tomcat的启动和关闭。我们要控制tomcat的启动关闭就得调用这两个批处理文件。
怎么调呢?在哪调呢?浏览器直接调那是不可能的。必须得在web服务器上部署个web页面,在服务端调用这两个命令。如果部署在权限系统内部那是最好的,不过这会产生一个问题,我们可以关闭tomcat,但却无法启动。最终的方案是在同一台机子上部署个.net实现的webservice,通过这个webservice实现权限系统的启动和关闭。
三、具体实现
  在vs2008中创建一个web service项目。
  创建两个webmethod。
  1.启动tomcat方法
复制代码 代码如下:

/// <summary>
/// 启动权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[webmethod]
public bool startpm()
{
try
{
// 创建进程启动信息
processstartinfo sinfo = new processstartinfo(appdomain.currentdomain.basedirectory + "start.bat");
// 获取系统环境变量
idictionary dics = environment.getenvironmentvariables(environmentvariabletarget.machine);
foreach (string key in dics.keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.environmentvariables.containskey(key)) continue;
sinfo.environmentvariables.add(key, dics[key].tostring());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.useshellexecute = false;
process.start(sinfo);
}
catch (exception ex)
{
//todo: 写日志
return false;
}
return true;
}

.关闭tomcat方法
复制代码 代码如下:

/// <summary>
/// 关闭权限系统
/// </summary>
/// <returns>true:成功;false:失败</returns>
[webmethod]
public bool stoppm()
{
try
{
// 创建进程启动信息
processstartinfo sinfo = new processstartinfo(appdomain.currentdomain.basedirectory + "stop.bat");
// 获取系统环境变量
idictionary dics = environment.getenvironmentvariables(environmentvariabletarget.machine);
foreach (string key in dics.keys)
{// 将系统环境变量加入新进程环境变量中
if (sinfo.environmentvariables.containskey(key)) continue;
sinfo.environmentvariables.add(key, dics[key].tostring());
}
// 不需要从系统外壳程序创建,直接从文件创建
sinfo.useshellexecute = false;
process.start(sinfo);
}
catch (exception ex)
{
//todo: 写日志
return false;
}
return true;
}

为了方便以后配置我有新建了两个bat文件。在这两个文件中分别做调用tomcat的startup.bat和shutdown.bat的操作。具体如下:
  1.start.bat  
复制代码 代码如下:
k:\apache-tomcat-6.0.30\bin\startup.bat

  2.stop.bat
复制代码 代码如下:
k:\apache-tomcat-6.0.30\bin\shutdown.bat

四、总结
  整个开发过程中出现了无法找到catalina_home、java_home环境变量的错误,那是因为父进程也就是web service的环境变量中并没有这两项,所以创建子进程时(子进程的环境变量继承于父进程)也没有这两项。只得从系统环境变量中获取环境变量重新添加进新启动的进程中。同时必须明确的是进程的工作目录不等于进程的启动目录。比如
复制代码 代码如下:
processstartinfo sinfo = new processstartinfo(appdomain.currentdomain.basedirectory + "stop.bat");

如果去掉appdomain.currentdomain.basedirectory将报无法找到stop.bat 的错误,就是因为工作目录和启动目录不一致导致。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网