سؤال

لدي ملف جرة قابلة للتنفيذ. هل من الممكن إنشاء خدمة Windows لتلك الجرة؟ في الواقع ، أريد فقط تشغيل ذلك عند بدء التشغيل ، لكنني لا أريد وضع ملف الجرة هذا في مجلد بدء التشغيل الخاص بي ، ولا في السجل.

هل كانت مفيدة؟

المحلول

يجب أن تخبرك هذا المقال بكل ما تحتاج إلى معرفته:"تشغيل تطبيقات Java كخدمة Windows"; ؛ يذكر باستخدام "غلاف خدمة جافا"(هناك طبعة مجتمعية تسمى yajsw)

نصائح أخرى

أسهل حل وجدته لهذا حتى الآن هو مدير الخدمة غير الامتصاص

سيكون الاستخدام

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"

استخدم NSSM.Exe ولكن تذكر أن تضع AppDirectory أو أي مكتبات أو موارد مطلوبة لن تكون متاحة. بشكل افتراضي ، قام NSSM بتعيين دليل العمل الحالي على تطبيق التطبيق ، Java.exe ، وليس الجرة. لذا افعل هذا لإنشاء برنامج نصي دفعة:

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

هذا يجب أن يصلح قضية توقف الخدمة.

لقد كنت أجرب مع Apache Commons Daemon. إنه يدعم Windows (بروبون) و UNIX (JSVC). المثبت المتقدم لديه ملف جافا خدمة البرنامج التعليمي مع مثال مشروع للتنزيل. إذا حصلت على تشغيل javaservice.jar كخدمة Windows ، فيمكنك اختبارها باستخدام "Telnet 4444". لقد استخدمت مثالهم لأن تركيزي كان على تشغيل خدمة Java Windows ، وليس كتابة Java.

قام Tanuki بتغيير ترخيص JSW منذ بعض الوقت ، إذا كنت سأبدأ مشروعًا ، فسأستخدم غلاف خدمة Java آخر ، http://yajsw.sourceforge.net/ هذا هو تطبيق مفتوح المصدر إلى حد ما يحاكي JWs ، ثم يبني عليه ويحسنه أكثر.

تحرير: لقد كنت أستخدم Yajsw لعدة سنوات على العديد من اللوحات (Windows ، العديد من Linuxes ...) وهو رائع ، التطور مستمر.

مع Procrun ، تحتاج إلى نسخ Prunsrv إلى دليل التطبيق (تحميل) ، وإنشاء install.bat مثل هذا:

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

أفترض

  • قم بتشغيل هذا من نفس الدليل حيث تكون الجرة و prunsrv.exe
  • الجرة لديها بيان العمل
  • ولديك خطافات إغلاق مسجلة في JVM (على سبيل المثال مع Context.registerShutDownHook () في الربيع) ...
  • عدم استخدام المسارات النسبية للملفات خارج الجرة (على سبيل المثال ، يجب استخدام Log4J log4j.appender.x.file = $ {app.home} /logs/my.log أو شيء على حد سواء)

تحقق من Procrun كتيب و هذا البرنامج التعليمي للمزيد من المعلومات.

نحن نستخدم ال غلاف خدمة تانوكي من أجل هذا. إنه قابل للتكوين للغاية.

خيار آخر هو Winsw: https://github.com/kohsuke/winsw/

قم بتكوين ملف XML لتحديد اسم الخدمة ، وماذا يتم تنفيذه ، وأي وسيط وما إلى ذلك واستخدم EXE للتثبيت. مثال XML: https://github.com/kohsuke/winsw/tree/master/examples

أنا أفضل هذا على NSSM ، لأنه exe خفيفة الوزن ؛ ويسهل مشاركة/الالتزام بالتكوين XML.

ملاحظة يتم تثبيت الخدمة عن طريق التشغيل your-service.exe install

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top