把java做成绿色软件

来源:互联网 发布:软件外包上市公司 编辑:程序博客网 时间:2024/04/29 19:52

最近在忙一个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;
}

原创粉丝点击