最近在忙一个java后台程序,开始的项目是做成一个后台程序,在系统启动的时候运行改程序。
老大希望做成windows服务,百度了一下,使用wrapper commonty版本完成了jar到windows服务封装。
见另一篇博客:http://blog.csdn.net/zhangxu365/article/details/8004040 【使用 wrapper 把jar打包成windows服务】
封装成服务其实已经是绿色的,但是需要注意的是文件中使用的路径,尽量使用相对路径,需要使用绝对路径的也有办法
见 http://blog.csdn.net/zhangxu365/article/details/8021504 java 获取当期路径。
程序还有一个客户端,启动采用程序动态生成BAT,因为BAT的内容是写文件写进去的,所以可以控制bat使用的路径。
java 动态执行该bat 就能完成相关操作。附上生成BAT,执行bat到删除bat的代码:
软件包内包含jre ,wrapper 的conf 可以设置jre路径,程序打包成jar 的时候也可以设置jre路径,使用免安装的jre也就不是难题了
/**
* 生成桌面右键菜单
*/
private void generateScreenMenu(){
//生成创建桌面右键的Bat文件
String creatMenuFile = FileHandle.creatScreenMenuBatFile();
try{
Process child = Runtime.getRuntime().exec(creatMenuFile);
child.waitFor();
FileHandle.deleteFile(creatMenuFile);
}catch(Exception e){
System.err.println(e.getMessage());
}
}
/**
* @param fileName---要生成的文件名
* @param oneLineContent---文件的第一行内容
* @param secondLineContent---文件的第二行内容
*
* 函数功能:生成制定文件名和文件内容的文件
*
*/
public static String creatScreenMenuBatFile() {
String tmpFullPath = "";
try {
tmpFullPath = StartPcService.INSTALLPATH+ "\\creatmenu.BAT";
File file = new File( tmpFullPath );
//如果文件已经存在则先删除
if(file.exists()&&file.isFile()) {
if( file.delete()) {
System.out.println("删除文件:"+tmpFullPath);
}
}
file.createNewFile();
String startPCContorPalyerPath = StartPcService.INSTALLPATH + "\\lib\\startPcControlPlayer.bat";
System.out.println(startPCContorPalyerPath);
if(StartPcService.OSNAME.equals("Windows 7")) {
String line1Content = "@echo off";
String line2Content = "reg add HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\发送到DMR";
String line3Content = "reg add HKEY_CLASSES_ROOT\\Directory\\Background\\shell\\发送到DMR\\command /ve /t reg_sz /d \"" + startPCContorPalyerPath + "\" /f";
FileWriter writer = new FileWriter(tmpFullPath, true);
writer.write(line1Content+ "\r\n");
writer.write(line2Content + "\r\n");
writer.write(line3Content + "\r\n");
writer.close();
}else {
String line1Content = "@echo off";
String line2Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}";
String line3Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\InProcServer32";
String line4Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\InProcServer32 /ve /t reg_expand_sz /d %SystemRoot%\\system32\\shdocvw.dll /f";
String line5Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance";
String line6Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance /v CLSID /t reg_sz /d {3f454f0e-42ae-4d7c-8ea3-328250d6e272} /f";
String line7Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance\\InitPropertyBag";
String line8Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance\\InitPropertyBag /v Param1 /t reg_sz /d \""+ startPCContorPalyerPath + "\" /f";
String line9Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance\\InitPropertyBag /v command /t reg_sz /d 发送到DMR /f";
String line10Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance\\InitPropertyBag /v method /t reg_sz /d ShellExecute /f";
String line11Content = "reg add HKEY_CLASSES_ROOT\\CLSID\\{00000000-0000-0000-0000-000000000003}\\Instance\\InitPropertyBag /v CLSID /t reg_sz /d {13709620-C279-11CE-A49E-444553540000} /f";
String line12Content = "reg add HKEY_CLASSES_ROOT\\Directory\\Background\\shellex\\ContextMenuHandlers\\{00000000-0000-0000-0000-000000000003}";
String line13Content = "CLS";
String line14Content = "color 2e";
writer = new FileWriter(tmpFullPath, true);
writer.write(line1Content+ "\r\n");
writer.write(line2Content + "\r\n");
writer.write(line3Content + "\r\n");
writer.write(line4Content + "\r\n");
writer.write(line5Content+ "\r\n");
writer.write(line6Content + "\r\n");
writer.write(line7Content + "\r\n");
writer.write(line8Content + "\r\n");
writer.write(line9Content+ "\r\n");
writer.write(line10Content + "\r\n");
writer.write(line11Content + "\r\n");
writer.write(line12Content + "\r\n");
writer.write(line13Content + "\r\n");
writer.write(line14Content + "\r\n");
writer.close();
}
System.out.println("成功创建文件:"+ tmpFullPath);
} catch (Exception e) {
// TODO Auto-generated catch block
tmpFullPath = "";
e.printStackTrace();
}
return tmpFullPath;
}