2012-01-13 3 views
0

내 Java 응용 프로그램 시작에 nsis를 사용하고 있습니다. 일단 응용 프로그램이 시작되면 창을 보여주고 싶었습니다. 이런 java 애플리케이션을 실행하는 동안 커맨드 라인 인수를 전달할 수 있습니다.이미 실행중인 nsis java launcher에 인수 전달

OutFile "Test.exe" 
.... 
ExecWait javaw.exe -jar myapp.jar 
SectionEnd 

지금은 NSIS 실행 프로그램의 다른 인스턴스가 호출 될 경우 이미 실행중인 자바 응용 프로그램의 기본 창을 보여 드리고자합니다. 이 작업을 수행하려면 Java 응용 프로그램에 인수를 전달해야합니다. 이 문제가 발생하려면 이미 실행중인 인스턴스의 cmd 창 (내부적으로 NSIS에서 사용됨)에 인수를 전달해야합니다.

어떻게하면됩니까?

+0

NSIS에서 사용하는 cmd 창은 무엇을 의미합니까? – Anders

답변

0

정확하게 이해할 수 있는지 확실하지 않지만 this example을 사용하여 nsis 설치 프로그램 용 뮤텍스를 만들 수 있습니다. 이미 설치되어있는 인스톨러를 가져올 예제가 있다면 핸들이나 제목을 알면 실행중인 자바 창을 앞에 놓기 위해 조금 바꿀 수 있습니다.

 System::Call "kernel32::CreateMutexA(i 0, i 0, t 'my_mutex') i .r0 ?e" 
    Pop $0 
    StrCmp $0 0 launch 
    FindWindow $1 "my window class" "my window title" 
    IntCmp $1 0 bring_front end 
    bring_front: 
    System::Call "user32::SetForegroundWindow(i r1) i." 
    end: 
    Abort 
    launch: 

Microsoft Visual Studio와 함께 제공되는 Spy ++가있는 경우 Java 응용 프로그램의 창 클래스를 찾을 수 있습니다.

+0

이것은 정확히 내가 한 일입니다. 그러나 거기에 문제가있었습니다. 자바 윈도우가 나타나지만 윈도우 안의 컨텐츠가로드됩니다. 또한 창 클래스 이름은 'SunAwtClass'와 같이 일반적입니다. 그래서 소켓 리스너를 사용하여 java 응용 프로그램에 인수를 전달하여 창을 표시해야했습니다. – Andrews

+0

"START"고유 한 제목 "[/ Dpath] [옵션]"javaw ... "[매개 변수]"를 대신 실행 한 다음 지정한 제목을 찾을 수 있습니까? – zenpoy