C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74727] Re:서버모니터링 프로그램 질문좀
빌더(TWx) [builder] 3419 읽음    2018-01-12 13:52
모니터링만.. 님이 쓰신 글 :
: 안녕하십니까
: 선배님들
:
: 날씨가 점점 추워지는데 감기조심하세요
:
: 다름이 아니라 질문하나가 있어서 이렇게 글 올립니다.
:
: 현재 서버프로세스 모니터링 관련 프로그램을
:
: 빌더 xe2버전 환경에서 만들고 있습니다.
:
: 환경은 window 서버이며   java로 만든 통신 서버를  
: 프로세스가 꺼질경우 자동으로 켜지도록 하는 (와치독) 프로그램을 개발중입니다.
:
: 현재 
: 모니터링 하려는 서버 프로그램은
: .jar 파일 실행시 백그라운드로 켜지기 때문에  바로가기를 생성하여  키고 있으며 이럴경우 cmd 창에 로그화면이 나와서
: 모니터링 할수 있게 되어있습니다.
: 문제는
: 제가 만드는 프로그램은 이러한 서버들이 프로세스가 꺼질경우 다시 키도록 하는 와치독 프로그램을
: 만들고 있지만  .jar파일을 실행시 백그라운드로 실행되기에 바로가기 쪽을 실행하려 하지만
: 아무리 진행해도  켜지지가 않습니다. ( java로만든 .exe 말고 다른 빌더 .exe파일로는 바로가기 실행 모두 잘됩니다.)
: 파일명을 영어로 수정하거나  test.lnk 로 실행해도 모두 실행되지 않으며
:
: ShellExecute 함수
: WinExec 함수
: CreateProcess 함수 모두 설정하였지만 위와 같은 문제로
: 자바실행프로그램의 경우 바로가기가 안되는것 같습니다.
:
: 혹시 같은경험하신분이나 문제해결하신분.. 도움부탁드립니다.
:
:


답변:


바로가기(숏트컷 링크)는...

사용자가 탐색기에서 만들 수도 있고, IShellLink Shell COM 인터페이스를 이용해서
프로그래밍 방법으로 생성할 수도 있습니다.

탐색기에서 숏트컷을 더블클릭 했을 때 실행이 되는지 부터 확인해 보세요.
쇼트컷이 제대로 만들어져 있다면, 탐색기에서 더블클릭 했을 때 실행이 되어야 합니다.

프로그래밍 방법으로 숏트컷을 실행시키려면...

ShellExecute(NULL, L"open", L"C:\\test\\run-jar.lnk", NULL, NULL, SW_SHOWDEFAULT);

와 같이 ShellExecute() API를 사용해야 하고...

별도의 프로세스를 생성하는 API를 이용하려면...
숏트컷 파일구조를 파싱해서 .lnk 파일 내부의 대상과 위치 정보를 알아내서 프로세스를 생성하거나
IShellLink Shell COM 인터페이스를 이용해서 .lnk 파일 내부의 정보를 알아내야 합니다.

커스텀 OS 이미지를 만들 때, Shell COM 레이어가 아직 Initialize 되지 않은 Early Time 시에
숏트컷을 실행하기 위해 .lnk 숏트컷 파일을 직접 파싱해 주어야 하는 경우도 있죠.

Installer 프로그램을 직접 만들 때도 IShellLink Shell COM 인터페이스는 필수적으로 사용되고.



압축해서 첨부해 올린 파일을(test.rar) c:/test 디렉토리에 풀어 넣으면...
run-jar.lnk (쇼트컷 파일)과 test.jar 두개의 파일이 있을 겁니다.

test.jar 파일은 Java로 만든 아래와 같은 간단한 콘솔모드 코드를 컴파일해서 jar로 변환한 겁니다.

<test.java>
import java.util.Scanner;
public class HelloWorld
{
    public static void main(String[] args) {
        String message;
            Scanner scan = new Scanner(System.in); 

        System.out.println("\nHello Java World!\n");
        System.out.println("    press Enter key to exit...");
        scan.nextLine();
    }
}

run-jar.lnk 파일 속성정보 창을 열어서 대상이 "java -jar test.jar"
시작위치가 "C\test" 되도록 되어 있으면 됩니다.

java 환경 패스가 걸려있으면 윈도우즈 쉘이 알아서 java.exe 의 패스를 채워 줌.


ShellExecute(NULL, L"open", L"C:\\test\\run-jar.lnk", NULL, NULL, SW_SHOWDEFAULT);

으로 숏트컷 링크파일을 ShellExecute() API로 실행하면
자바 런타임 버전이 맞으면 아래와 같이 test.jar 가 실행 될 것임.




+ -

관련 글 리스트
74722 서버모니터링 프로그램 질문좀 모니터링만.. 3183 2018/01/11
74727     Re:서버모니터링 프로그램 질문좀 빌더(TWx) 3419 2018/01/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.