2017-05-31 28 views
-1

我已經使用install4j創建了一個應用程序,並且在成功安裝後,我需要在Linux/Windows計算機中重新啓動一些服務。如何在install4j中配置「啓動/停止服務」?

我寫了一個腳本來停止和啓動java中的服務。但是我想在install4j中處理這個操作。

int restartService = Util.showOptionDialog("\nClick on \"Yes\" to restart the service now and Click on \"No\" to restart the service manually later.",new String[]{"Yes","No"},1); 
//0= yes restart 
//1= no 

if(restartService == 0){ 
    if(Util.isWindows()) 
    { 
     context.getProgressInterface().setStatusMessage("Checking service is present or not..."); 
     context.getProgressInterface().setPercentCompleted(10); 
     String serviceName = "vspherewebclientsvc"; 
      try { 
       boolean isProcessActive = false; 
       Util.logInfo(null,"Step 1 : Checking service is present or not..."); 
       Process p = Runtime.getRuntime().exec("sc query " + serviceName); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       String line = reader.readLine(); 
       while (line != null) { 
        if (line.trim().startsWith("STATE")) { 
         while (!("4".equals(line.trim().substring(line.trim().indexOf(":") + 1, line.trim().indexOf(":") + 4).trim()) || "2".equals(line.trim().substring(line.trim().indexOf(":") + 1, line.trim().indexOf(":") + 4).trim()))) { 
          Util.logInfo(null,"running"); 
         } 
         Util.logInfo(null,"\t-> Service is Active!"); 
         isProcessActive = true; 
        } 
        line = reader.readLine(); 
       } 

       if (isProcessActive) { 
        context.getProgressInterface().setStatusMessage("Stopping service..."); 
        context.getProgressInterface().setPercentCompleted(20); 
        Util.logInfo(null,"Step 2 : Stopping service..."); 
        String[] stop = {"cmd.exe", "/c", "net", "stop", serviceName, "/yes"}; 
        Process p1 = Runtime.getRuntime().exec(stop); 
        p1.waitFor(); 
        BufferedReader reader1 = new BufferedReader(new InputStreamReader(p1.getInputStream())); 
        String line1 = reader1.readLine(); 
        while (line1 != null) { 
         line1 = reader1.readLine(); 
        } 
        context.getProgressInterface().setStatusMessage("Waiting for Stop service..."); 
        context.getProgressInterface().setPercentCompleted(40); 
        Thread.sleep(30000); 

        context.getProgressInterface().setStatusMessage("Validating stop operation..."); 
        context.getProgressInterface().setPercentCompleted(50); 
        boolean isProcessStopped = false; 
        Process p2 = Runtime.getRuntime().exec("sc query " + serviceName); 
        BufferedReader reader2 = new BufferedReader(new InputStreamReader(p2.getInputStream())); 
        String line2 = reader2.readLine(); 
        while (line2 != null) { 
         if (line2.trim().startsWith("STATE")) { 
          while (!("1".equals(line2.trim().substring(line2.trim().indexOf(":") + 1, line2.trim().indexOf(":") + 4).trim()) || "3".equals(line2.trim().substring(line2.trim().indexOf(":") + 1, line2.trim().indexOf(":") + 4).trim()))) { 
           Util.logInfo(null,"stopping"); 
          } 
          Util.logInfo(null,"\t-> Finished with Stop operation!"); 
          isProcessStopped = true; 
         } 
         line2 = reader2.readLine(); 
        } 

        context.getProgressInterface().setStatusMessage("Starting service..."); 
        context.getProgressInterface().setPercentCompleted(60); 
        if (isProcessStopped) { 
         Util.logInfo(null,"Step 3 : Starting service..."); 
         String[] start = {"cmd.exe", "/c", "sc", "start", serviceName}; 
         Process p3 = Runtime.getRuntime().exec(start); 
         p3.waitFor(); 
         BufferedReader reader3 = new BufferedReader(new InputStreamReader(p3.getInputStream())); 
         String line3 = reader3.readLine(); 
         while (line3 != null) { 
          line3 = reader3.readLine(); 
         } 
         Util.logInfo(null,"\t-> Finished with Start operation!"); 
        } 
       } else { 
        Util.logInfo(null,"Error : Service is not Active..."); 
       } 
       context.getProgressInterface().setStatusMessage("Validating start operation..."); 
       context.getProgressInterface().setPercentCompleted(80); 
       Thread.sleep(30000); 

       Util.logInfo(null,"Step 4 : Validating Restart operation!"); 
       boolean isProcessRestarted = false; 
       Process p4 = Runtime.getRuntime().exec("sc query " + serviceName); 
       BufferedReader reader4 = new BufferedReader(new InputStreamReader(p4.getInputStream())); 
       String line4 = reader4.readLine(); 
       while (line4 != null) { 
        if (line4.trim().startsWith("STATE")) { 
         while (!("4".equals(line4.trim().substring(line4.trim().indexOf(":") + 1, line4.trim().indexOf(":") + 4).trim()) || "2".equals(line4.trim().substring(line4.trim().indexOf(":") + 1, line4.trim().indexOf(":") + 4).trim()))) { 
          Util.logInfo(null,"restarting"); 
         } 
         isProcessRestarted = true; 
        } 
        line4 = reader4.readLine(); 
       } 

       if (isProcessRestarted) { 
        Util.logInfo(null,"\t-> Restart operation is successfull!"); 
        context.getProgressInterface().setStatusMessage("Restart operation is successfull!"); 
        context.getProgressInterface().setPercentCompleted(90); 
       } else { 
        Util.logInfo(null,"\t-> Restart operation is not successfull!"); 
        context.getProgressInterface().setStatusMessage("Restart operation is not successfull!"); 
        context.getProgressInterface().setPercentCompleted(90); 
       } 
       context.getProgressInterface().setStatusMessage("Completed!"); 
       context.getProgressInterface().setPercentCompleted(100); 
       return true; 
      } catch (InterruptedException ex) { 
       return false; 
      } 
    } 
    else if (Util.isLinux()) 
    { 
    try { 
       String[] command = {"/bin/bash","-c","/etc/init.d/vsphere-client restart"}; 
       Process p = Runtime.getRuntime().exec(command); 
       p.waitFor(); 
       Util.logInfo(null,"Done"); 
       return true; 
      } catch (IOException ex) { 
       return false; 
      } 
    }else{ 
     return false; 
    } 
}else{ 
    context.goBack(0); 
    return false; 
} 

我們如何在install4j中使用「啓動/停止服務」來實現此目的?

回答

1

在install4j中有「停止服務」和「啓動服務」操作,您可以將其用於此目的。

+0

是的。但我需要一些例子來用install4j來實現這個。如果您與我分享任何參考/鏈接,對我而言將會非常有幫助。 –

+0

您只需爲同一服務添加「停止服務」和「啓動服務」操作,然後重新啓動。具有服務的示例項目是「hello」示例項目。 –