Cómo registrar un programa java como servicio de Windows
A continuación se describe cómo utilizar el software javaService para registrar un programa Java como un servicio de Windows.
I. Utilice javaService para registrar el programa java como un servicio de Windows
[1] Descargar javaService
Visite URL.test.timer.TimerShutDownWindows
2) Exporte el archivo java escrito como una clase y coloque la clase exportada en el directorio "D:/software/JavaService-2.0.10/classes/com/test/timer". Es decir, coloque el paquete com exportado en el directorio "D:/software/JavaService-2.0.10/classes".
[4] Registra el programa java como servicio de windows
Ingresa al directorio "D:/software/JavaService-2.0.10" y ejecuta el siguiente comando:
JavaService.exe - instale MyShutDownService "JAVA_HOME"/jre/bin/server/jvm.dll -Djava.class.path="JAVA_HOME"/lib/tools.jar D:/software/JavaService- 2.0.10/; clases -start com.test.timer.TimerShutDownWindows
Entre ellos, el parámetro después de "-install" es el nombre del servicio, el parámetro después de "-start" es el nombre de la clase que se iniciará , "Djava.class.path" "D:/software/JavaService-2.0.10/classe" en los siguientes parámetros es el nombre de la clase que se iniciará, el parámetro después de "-install" es el nombre del servicio, y el parámetro después de "-start" es start El nombre de la clase. D:/software/JavaService-2.0.10/classe
"D:/software/JavaService-2.0.10/classe" en el parámetro después de la dirección classe " es la ruta de almacenamiento de mi "TimerShutDownWindows" class. La aplicación real puede simplemente cambiarlo a su propio classPath. Aquí, debe prestar atención a los siguientes puntos:
1) Directorio jdk "JAVA_HOME", si no configura el directorio jdk, reemplácelo con la dirección absoluta real del jdk.
2) ?-Djava.class.path es necesario porque no se puede acceder a la variable CLASSPATH del sistema cuando se inicia el servicio, por lo que debe declararse aquí si hay muchos archivos jar, para evitar escribir; Comandos demasiado largos. Podemos usar el parámetro "-Djava.ext.dirs=directorio donde se encuentran los archivos jar".
3) Después de agregar el servicio, puede escribir el comando "services.msc" en la línea de comando para ver todos los servicios, y también puede modificar el tipo de inicio del servicio (inicio automático o inicio manual). , etc.).
[5] Prueba
1) ?Iniciar el servicio
Después de registrar el servicio, podemos usar el comando "net start MyShutDownService" para iniciar el servicio Una vez iniciado el servicio, genere el archivo de registro my_shutdown.log en el directorio raíz de la unidad D.
2) ?Cerrar el servicio
Si desea cerrar el servicio, podemos usar el comando "net stop MyShutDownService" para cerrar el servicio.
3) ?Eliminar servicio
Si desea eliminar el servicio, puede utilizar el comando "sc delete MyShutDownService" para eliminar el servicio.
II.?Paquete de código de apagado del temporizador?com.test.timer;
importar?java.io.File;
importar?java.io. ;
importar?java.io.IOException;
importar?java.io.PrintWriter;
importar?java.text.SimpleDateFormat;
import?java.util.Date;
public?class?TimerShutDownWindows?{
/*?¿Intervalo de tiempo utilizado para detectar si es necesario apagar? */
private?static?long?m_nDetectInterval?=?5000;
/*?¿Registrar el tiempo de la última detección en milisegundos? */
private?static?long?m_lLastMilliSeconds?=?0;
/*?¿El número mínimo de horas que se puede usar la computadora? */
private?static?int?m_nUsePCMinHour?=?17;
/*?¿El número máximo de horas que se puede usar la computadora? */
private?static?int?m_nUseComputerMaxHour?=?23;
/*?¿Apagar la computadora si la cantidad de minutos excede este tiempo? */
private?static?int?m_nMinutes?=?25;
/*?¿Dónde se almacenan los archivos de registro? */
privado?D: "??File.separator
?" my_shutdown.log";
/*?Registra si el sistema actual se ha iniciado ¿Programa de apagado automático? */
privado estático booleano bHasShutDownPC = false;
/** *?@param?args */
público?static?void ? main(String[]?args)?{
/?Iniciar un hilo separado para la detección
Thread?aThread?=?new?Thread(new?TimerDetector());
aThread.start();
}
*?Definir clase interna* *?@autor?Administrador * */
estático ?clase?TimerDetector?implementos?Runnable?{
/* *?(no Javadoc) * *?@see?java.lang.Runnable#run() */
public ?void?run()?{
//?1. Obtener el archivo de registro
PrintWriter?out?=?null;
SimpleDateFormat? df?= ?new?SimpleDateFormat("aaaa-MM-dd?HH:mm:ss");
intenta?{out?=?new?PrintWriter(new?FileWriter(m_sLogFile,?true) ,?verdadero );<
/p>
}?{ out?=?null; e1.printStackTrace();
}
}
/?Registrar el tiempo de inicio del servicio
appendLog(out, ?"??Hora de inicio del servicio: "? ?df.format(new?Date());
while(true)?{ ///?1 Determinar si se ha modificado la hora actual del sistema boolean?bShoudShutDownPC?=?validateShoudShutDownPC(out); if?(bShoudShutDownPC)?{ ///?La validación falló, forzar el cierre ejecutarShutDown(out); Hilo. dormir(m_nDetectInterval); }?{ appendLog(out,?e.getMessage() }
}
}
}
}
/** *?Verifique si la hora actual es la hora en la que es necesario apagar la computadora* *?@return */
privado?booleano ?validateShoudShutDownPC(PrintWriter?_out)? {
//?1 Determinar si la hora del sistema ha sido modificada
boolean?bHasModifySystemTime?=?detectModifySytemTime(_out);
appendLog(_out, ? " bHasModifySystemTime?: "? ?bHasModifySystemTime);
if?(bHasModifySystemTime)?{ return?bHasModifySystemTime;
}
//?2. Al modificar la hora del sistema, determine si la hora actual es más larga que la hora especificada
boolean?bShoudSleep?=?nowIsSleepTime();
appendLog( _out,?" bShoudSleep?: "? ? bShoudSleep);
si?(bShoudSleep)?{ return?bShoudSleep;
}
return?false;
} p>
/** *?Determinar si la hora actual es la hora en la que debes descansar* *?@return */
¿privado? boolean?nowIsSleepTime()?{
///?1. Obtener los valores actuales de hora y minutos
Calendar?aCalendar?=?Calendar.getInstance();
int?nHour?=?aCalendar.get(Calendar.HOUR_OF_DAY );
int?nMinute?=?aCalendar.get(Calendar.MINUTE);
/?2. Determine si la hora actual está dentro del rango de tiempo en el que se puede usar la PC, la hora máxima El número es 23
if(nHour?lt;?m_nUsePCMinHour)?{ return?true;
}
/?23 puntos deben juzgarse por separado. Debe interrumpirse a las 23:30
si (
(nHour?gt;=?m_nUseComputerMaxHour)? amp;amp;?(nMinute?gt;=?m_nMinutes))?{ return true;
}
}
/?Tiempo de no silencio
return?false;
}
/** *? Determinar si alguien ha modificado la hora del sistema. alguien lo ha modificado Si se excede la hora del sistema, devuelve verdadero, lt; BRgt *? De lo contrario, devuelve falso * *?@return */
private?boolean?detectModifySytemTime(PrintWriter?_out)?{
///?1. Primera detección de la hora del sistema
if(m_lLastMilliSeconds?==?0)?{ m_lLastMilliSeconds?=?System.currentTimeMillis() return?false;
}
/? 2. Detectar la diferencia entre dos tiempos
long?-m_lLastMilliSeconds;
lInteral?=?Math.abs (lInteral);
//?3. Determinar el intervalo de tiempo entre dos tiempos. Los dos resultados pueden no ser exactamente iguales a?m_nDetectInterval?Permitir un error de 1 minuto
de duración. ?lMaxInterval?=?m_nDetectInterval ? ?60?*?1000;
appendLog(_out,?" lInteral?:::"? ?lInteral);
appendLog(_out,? " lMaxInterval?::: "? ?lMaxInterval);
if?(lInteral?gt;?lMaxInterval)?{ //Alguien ha modificado la hora del sistema, fuerce el retorno del apagado?true; p>
}
/?Solo registre la última hora de detección si nadie modifica la hora
m_lLastMilliSeconds?=?System.currentTimeMillis();
return?false;
}
/** *?Escribe información de registro en la secuencia especificada* *?@param?_outWriter *?@param?_sAppendContent */
¿privado?appendLog(PrintWriter?_outWriter,?String?_sAppendContent)?{
if(_outWriter ==?null)?{ return;
} p>
_outWriter .println(_sAppendContent);
}
/** *?Ejecutar comando de apagado*/
privado?void?exectueShutDown( PrintWriter?_out)?{
if(bHasShutDownPC)?{ SimpleDateFormat?df?=?new?SimpleDateFormat( "aaaa-MM-dd?HH:mm:ss"); appendLog(_out,?" ?El sistema está a punto de cerrarse? Hora actual: "? ?df.fo
rmat(new?Date()); Return;
}
appendLog(_out,? "? ¡Alguien cambió la hora del sistema y el sistema se vio obligado a cerrarse!");
// ?Shutdown
intenta?{ Runtime.getRuntime().exec( "shutdown?-s?-t?120?-c?/"?Es tarde, es hora de ir a la cama, apague la computadora después de 2 minutos /"");
}?catch(IOException?e)?{ appendLog(_out,?e.getMessage());
}
bHasShutDownPC?=?true;
}
}
}
}
}
}
}
}
}