문제

XP 및 Vista에 서비스로 설치해야 하는 Java 애플리케이션을 상속받았습니다.어떤 형태로든 Windows를 사용한 지 약 8년이 지났고 Java 앱과 같은 것에서는 말할 것도 없고 서비스를 만들 필요가 없었습니다(앱용 jar과 단일 종속성 jar - log4j가 있습니다). ).이것을 서비스로 실행하는 데 필요한 마법은 무엇입니까?소스가 있으므로 코드 수정은 피하는 것이 좋지만 가능합니다.

도움이 되었습니까?

해결책

나한테는 행운이 좀 있었어 Java 서비스 래퍼

다른 팁

아파치 커먼즈 데몬 좋은 대안입니다.그것은 가지고있다 프로크런 Windows 서비스의 경우 Jsvc 유닉스 데몬용.덜 제한적인 Apache 라이센스를 사용하며 Apache Tomcat은 이를 Windows 및 Linux에서 실행하기 위해 자체의 일부로 사용합니다!작동시키는 것은 약간 까다롭지만 철저한 기사 실제 사례와 함께.

그 외에도 bin\service.bat를 볼 수 있습니다. 아파치 톰캣 서비스를 설정하는 방법에 대한 아이디어를 얻으려면.Tomcat에서는 Procrun 바이너리의 이름을 바꿉니다(prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).

Procrun을 사용하면서 제가 겪었던 문제는 시작 및 중지 메소드가 매개변수(String[] argv)를 허용해야 한다는 것입니다.예를 들어 "start(String[] argv)" 및 "stop(String[] argv)"는 작동하지만 "start()" 및 "stop()"은 오류를 발생시킵니다.해당 호출을 수정할 수 없는 경우 필요에 맞게 해당 호출을 처리할 수 있는 부트스트래퍼 클래스를 만드는 것을 고려해 보세요.

와 함께 아파치 커먼즈 데몬 이제 사용자 정의 실행 파일 이름과 아이콘을 가질 수 있습니다! 자신만의 이름과 아이콘이 있는 맞춤형 Windows 트레이 모니터를 얻을 수도 있습니다!

이제 내 서비스가 내 이름과 아이콘(prunsrv.exe)으로 실행되고 있으며 시스템 트레이 모니터(prunmgr.exe)에도 내 사용자 정의 이름과 아이콘이 있습니다!

  1. 다운로드 Apache Commons 데몬 바이너리 (prunsrv.exe 및 prunmgr.exe가 필요합니다).
  2. 이름을 다음과 같이 바꾸세요. MyServiceName.exe 그리고 MyServiceNamew.exe 각기.
  3. 다운로드 WinRun4J 그리고 RCEDIT.exe 다음과 같이 사용자 정의 아이콘을 포함하도록 Apache 실행 파일을 수정하는 데 함께 제공되는 프로그램입니다.

    > RCEDIT.exe /I MyServiceName.exe customIcon.ico
    > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
    
  4. 이제 다음과 같이 Windows 서비스를 설치하십시오(참조: 선적 서류 비치 자세한 내용 및 옵션은 다음을 참조하세요.)

    > MyServiceName.exe //IS//MyServiceName \
      --Install="C:\path-to\MyServiceName.exe" \
      --Jvm=auto --Startup=auto --StartMode=jvm \
      --Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
      --StartClass=com.mydomain.MyClassWithMainMethod
    
  5. 이제 자신의 아이콘과 이름으로 실행되는 Jar의 Windows 서비스가 생겼습니다!모니터 파일을 실행할 수도 있으며, 해당 파일은 자신의 아이콘과 이름으로 시스템 트레이에서 실행됩니다.

또 하나의 옵션은 WinRun4J.이는 Windows 서비스 호스트(32비트 및 64비트 버전 모두)의 역할을 하는 구성 가능한 Java 실행 프로그램입니다.오픈소스이므로 사용에 제한이 없습니다.

(전체 공개:나는 이 프로젝트에 참여하고 있다.)

또 다른 대답은 또 다른 Java 서비스 래퍼, 이는 더 나은 라이센스를 제공하므로 Java Service Wrapper에 대한 좋은 대안인 것 같습니다.또한 JSW에서 YAJSW로 쉽게 이동할 수 있도록 고안되었습니다.Windows 서버를 처음 접하고 Java 앱을 서비스로 실행하려는 저에게는 확실히 사용하기가 매우 쉬웠습니다.

내가 찾은 다른 것들도 있지만 결국 사용하지 않았습니다.

  • 자바 서비스 실행기 YAJSW보다 작업하기가 더 복잡해 보이기 때문에 이것을 사용하지 않았습니다.이건 포장이 아닌 것 같아요.
  • JSmooth Window 서비스를 만드는 것이 주요 목표는 아니지만 할 수 있다.2007년 이후 활동이 없었기 때문에 사용하지 않았습니다.

내 생각 엔 자바 서비스 래퍼 잘 작동합니다.참고하세요 세 가지 방법 귀하의 응용 프로그램을 통합합니다.코드를 변경하고 싶지 않다면 옵션 1이 가장 적합할 것 같습니다.구성 파일이 약간 이상할 수 있지만 (옵션 1의 경우) 시작하고 인수를 지정할 프로그램이 프로그램을 시작하는 도우미 프로그램이라는 점만 기억하세요.그들은 예제 구성 파일 이를 위해.

자바서비스 LGPL이다.매우 쉽고 안정적입니다.추천.

Java 8을 사용하면 외부 도구 없이 이 시나리오를 처리할 수 있습니다. 자바 패키저 Java 8과 함께 제공되는 도구는 자체 포함된 애플리케이션 번들을 생성하는 옵션을 제공합니다.

-원형 유형은 자체 포함 된 응용 분리 번들을 생성합니다 (가능한 경우).-B 옵션을 사용하여 사용 중인 번들러에 인수를 제공합니다.유형이 지정되면 이 유형의 번들만 생성됩니다.유형을 지정하지 않으면 모두가 사용됩니다.

유형에 유효한 값은 다음과 같습니다.

-native type
Generate self-contained application bundles (if possible). Use the -B option to provide arguments to the bundlers being used. If type is specified, then only a bundle of this type is created. If no type is specified, all is used.

The following values are valid for type:

all: Runs all of the installers for the platform on which it is running, and creates a disk image for the application. This value is used if type is not specified.
installer: Runs all of the installers for the platform on which it is running.
image: Creates a disk image for the application. On OS X, the image is the .app file. On Linux, the image is the directory that gets installed.
dmg: Generates a DMG file for OS X.
pkg: Generates a .pkg package for OS X.
mac.appStore: Generates a package for the Mac App Store.
rpm: Generates an RPM package for Linux.
deb: Generates a Debian package for Linux.

Windows의 경우 다음을 참조하세요. 문서 필요에 따라 msi 또는 exe를 만들 수 있습니다.

exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.

사용 "윈스"는 Glassfish v3용으로 작성되었지만 일반적으로 Java 프로그램과 잘 작동합니다.

.NET 런타임이 설치되어 있어야 합니다.

Gradle Build Tool을 사용하는 경우 다음을 시도해 볼 수 있습니다. Windows 서비스 플러그인, 이는 다음의 사용을 용이하게 합니다. Apache Commons 데몬 Procrun.

플러그인을 사용하여 Java Windows 서비스 애플리케이션을 생성하려면 몇 가지 간단한 단계를 거쳐야 합니다.

  1. 적절한 메소드를 사용하여 기본 서비스 클래스를 작성하십시오.

    public class MyService {
    
        public static void main(String[] args) {
            String command = "start";
            if (args.length > 0) {
                command = args[0];
            }
            if ("start".equals(command)) {
                // process service start function
            } else {
                // process service stop function
            }
        }
    
    }
    
  2. 플러그인을 build.gradle 파일.

    buildscript {
      repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
      }
      dependencies {
        classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0"
      }
    }
    
    apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"
    

    Gradle 2.1에 도입된 새로운 인큐베이팅 플러그인 메커니즘에 대한 동일한 스크립트 스니펫:

    plugins {
      id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0"
    }
    
  3. 플러그인을 구성합니다.

    windowsService {
      architecture = 'amd64'
      displayName = 'TestService'
      description = 'Service generated with using gradle plugin'   
      startClass = 'MyService'
      startMethod = 'main'
      startParams = 'start'
      stopClass = 'MyService'
      stopMethod = 'main'
      stopParams = 'stop'
      startup = 'auto'
    }
    
  4. 달리다 WindowsService 생성 Windows 서비스 배포판을 만드는 Gradle 작업입니다.

이것이 간단한 Windows 서비스를 만들기 위해 해야 할 전부입니다.플러그인은 자동으로 Apache Commons Daemon Procrun 바이너리를 다운로드하고, 이 바이너리를 서비스 배포 디렉터리에 추출하고, 서비스 설치/제거를 위한 배치 파일을 생성합니다.

~ 안에 ${project.buildDir}/windows-service 디렉터리에서 서비스 실행 파일, 서비스 설치/제거를 위한 배치 스크립트 및 모든 런타임 라이브러리를 찾을 수 있습니다.서비스 실행을 설치하려면 <project-name>-install.bat 서비스를 제거하려면 실행하세요. <project-name>-uninstall.bat.서비스 이용을 시작하고 중지하려면 <project-name>w.exe 실행 가능.

서비스 시작을 처리하는 메서드는 처리를 수행하기 위해 별도의 스레드를 만들고 시작한 다음 반환해야 합니다.기본 메서드는 서비스를 시작하고 중지할 때 다른 스레드에서 호출됩니다.

자세한 내용은 플러그인 및 Apache Commons Daemon Procrun을 읽어보세요.

나는 사용했다 자바서비스 전에는 좋은 성공을 거두었습니다.몇 년 동안 업데이트되지 않았지만 사용했을 때 꽤 견고했습니다.

Java Service Wrapper의 라이센스가 마음에 들지 않았습니다.나는 작업을 수행하는 서비스를 작성하기 위해 ActiveState Perl을 사용했습니다.

C#으로 서비스를 작성하려고 생각했지만 시간 제약이 너무 빡빡했습니다.

나는 항상 sc.exe를 사용합니다. http://support.microsoft.com/kb/251192).SP1부터 XP에 설치해야 하며, Vista 버전이 아닌 경우 Vista 리소스 키트를 사용하여 다운로드할 수 있습니다.

Java를 사용하여 너무 복잡한 작업을 수행하지는 않았지만 정규화된 명령줄 인수(x:\java.exe ....)를 사용하거나 Ant를 사용하여 종속성을 포함하고 매개변수를 설정하는 스크립트를 만드는 것이 잘 작동합니다.

다양한 솔루션에 대한 매우 좋은 비교는 다음에서 확인할 수 있습니다.http://yajsw.sourceforge.net/#mozTocId284533

개인적으로 launch4j를 좋아합니다

바로가기를 넣어야 하니까 간단해요

윈도우 7 C:\users\All Users\Start Menu\Programs\Startup(관리자) 또는 User home directory(%userProfile%)

윈도우 10 :실행 중 shell:startup

속성 -> 바로가기 -> 대상 -> java.exe -jar D:\..\runJar.jar

메모:로그인 후에만 실행됩니다.


관리자 권한으로

sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar" Windows 서비스를 생성합니다

당신이 얻는다면 시간 초과 사용 cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war 하지만 이것으로도 시간 초과가 발생하지만 백그라운드에서 java.exe가 시작됩니다.작업 관리자에서 확인

메모:이는 Windows 로그온 시작 시 실행됩니다(로그인 전, 서비스 기준 'Startup Type')

Windows 서비스 생성에 대한 자세한 설명

또 다른 좋은 옵션은 파이어데몬.NASA, IBM 등과 같은 일부 대형 상점에서 사용됩니다.전체 목록을 보려면 해당 웹사이트를 참조하세요.

현재 Eclipse 기반 애플리케이션을 실행하려면 이것이 필요하지만 먼저 해당 애플리케이션에 로컬인 일부 변수를 설정해야 합니다.sc.exe는 실행 파일만 허용하고 스크립트는 허용하지 않으므로 Windows 2003 리소스 키트.서비스를 단일 배치 파일로 제한하지만 서비스로 변환하려면 하나의 배치 스크립트만 필요합니다.

챠오!

Exe4j는 무료는 아니지만 매우 좋은 옵션입니다.에서 확인해보세요 Exe4j .exe 파일을 생성하는 마법사에는 서비스를 생성하는 옵션이 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top