Asp.net控制Tomcat启动关闭的实现方法
2012-01-09 00:00
661 查看
一、场景
近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等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方法
.关闭Tomcat方法
为了方便以后配置我有新建了两个bat文件。在这两个文件中分别做调用Tomcat的startup.bat和shutdown.bat的操作。具体如下:
1.start.bat
2.stop.bat
四、总结
整个开发过程中出现了无法找到CATALINA_HOME、J***A_HOME环境变量的错误,那是因为父进程也就是web service的环境变量中并没有这两项,所以创建子进程时(子进程的环境变量继承于父进程)也没有这两项。只得从系统环境变量中获取环境变量重新添加进新启动的进程中。同时必须明确的是进程的工作目录不等于进程的启动目录。比如
如果去掉AppDomain.CurrentDomain.BaseDirectory将报无法找到stop.bat 的错误,就是因为工作目录和启动目录不一致导致。
近日有个项目客户要求能自己配置相关权限。由于历史原因这个项目采用的是公司以前的权限系统。这个权限系统很强大,不过有个弊端,就是每增加一个权限菜单都要重启才能生效,不然就要等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、J***A_HOME环境变量的错误,那是因为父进程也就是web service的环境变量中并没有这两项,所以创建子进程时(子进程的环境变量继承于父进程)也没有这两项。只得从系统环境变量中获取环境变量重新添加进新启动的进程中。同时必须明确的是进程的工作目录不等于进程的启动目录。比如
ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");
如果去掉AppDomain.CurrentDomain.BaseDirectory将报无法找到stop.bat 的错误,就是因为工作目录和启动目录不一致导致。
相关文章推荐
- Asp.net控制Tomcat启动关闭的实现方法
- ASP.NET MVC 中实现基于角色的权限控制的处理方法
- asp.net实现数据从DataTable导入到Excel文件并创建表的方法(IIS必须启动32位)
- ASP.NET MVC 中实现基于角色的权限控制的处理方法
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- asp.net在事件中启动线程来打开一个页面的实现方法
- asp.net在事件中启动线程来打开一个页面的实现方法
- asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
- asp.net master母版页标题控制方法
- asp.net 返回上一页的实现方法小集
- 在ASP.Net中两种利用CSS实现多界面的方法
- 在ASP.Net中两种利用CSS实现多界面的方法(转)
- asp.net基于windows服务实现定时发送邮件的方法
- ASP.NET MVC 中如何实现基于角色的权限控制
- Ajax调用asp.net后台方法功能实现
- 采集/自动登录啊都可以用这两个方法实现 asp.net
- ASP.NET实现页面传值的几种方法
- asp.net中ListBox 绑定多个选项为选中及删除实现方法
- ASP.NET中的几种弹出框提示基本实现方法