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
[47038] Re:프로세스 컨트롤에 대한 질문 입니다.
장성호 [nasilso] 1582 읽음    2006-11-10 12:07
방법1 . Process를 찾아서    TerminateProcess로 삭제하면 됩니다.
     Process를 찾는 함수는 FindProcess로 검색해 보세요
     다시 실행은  WinExec
  
방법2. 윈도우 서비스에 등록했다고 말씀하셨으니까
   서비스관련 API를 이용하는 방법이있습니다.
   내가등록한 서비스가 제대로 등록되어있는지
   현재 상태는 어떤지...  
   
   아래 코드를 참조해 보세요


BOOL RemoveService(String sSrvName)
{
    SC_HANDLE schService = NULL;

    SC_HANDLE schSCManager = NULL;

    TCHAR szError[MAX_PATH] = {0, };

    BOOL bRet = FALSE;

    schSCManager = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS );
    if ( NULL != schSCManager )
    {
        schService = ::OpenService(schSCManager,sSrvName.c_str(),SERVICE_ALL_ACCESS);
        if (NULL != schService)
        {
            if (TRUE == ::ControlService(schService,SERVICE_CONTROL_STOP, &g_sStatus))
            {
                while( ::QueryServiceStatus( schService, &g_sStatus) )
                {
                    if (g_sStatus.dwCurrentState == SERVICE_STOP_PENDING )
                    {
                        ::Sleep( 1000 );
                    }
                    else
                    {
                        break;
                    }

                }
                if (g_sStatus.dwCurrentState == SERVICE_STOPPED )
                {
                    ShowMessage(sSrvName+" Stop \n");
                    bRet = TRUE;
                }
                else
                {
                    ShowMessage(sSrvName+" failed \n");
                    bRet = FALSE;
                }
            }
            if( TRUE == ::DeleteService(schService) )
            {
                ShowMessage(sSrvName+" removed \n");
                //printf("MySql removed \n");
                bRet = TRUE;
            }
            else
            {
               ShowMessage(sSrvName+" DeleteService failed \n");
                //printf("MySql DeleteService failed \n");
                bRet = FALSE;
            }
            ::CloseServiceHandle(schService);
        }
        else
        {
            ShowMessage(sSrvName+" OpenService failed \n");
            //printf("MySql OpenService failed \n");
            bRet = FALSE;

        }
        ::CloseServiceHandle(schSCManager);
    }
    else
    {
        ShowMessage(sSrvName+" OpenSCManager failed \n");
        //printf("MySql OpenSCManager failed \n");
        bRet = FALSE;
    }
    return bRet;
}
//---------------------------------------------------------------------------
void __fastcall StartService(String sSrvName)
{
    SC_HANDLE hScm,hSrv;
    SERVICE_STATUS ss;

    hScm=OpenSCManager(NULL,NULL,GENERIC_READ);
    hSrv=OpenService(hScm,sSrvName.c_str(),SERVICE_START| SERVICE_QUERY_STATUS);//AMR_IP_SER.exe//AMR Remote IP Server

    ::SetCursor(LoadCursor(NULL,IDC_WAIT));
    if(StartService(hSrv,0,NULL)==TRUE)
    {
        QueryServiceStatus(hSrv,&ss);
        while(ss.dwCurrentState != SERVICE_RUNNING)
        {
            Sleep(ss.dwWaitHint);
            QueryServiceStatus(hSrv,&ss);
        }
    }
    else
    {
        //
        hSrv=OpenService(hScm,sSrvName.c_str(),SERVICE_CONTROL_INTERROGATE);

        ControlService(hSrv,SERVICE_CONTROL_INTERROGATE,&ss);
        if(ss.dwCurrentState==SERVICE_PAUSED)
        {
            hSrv=OpenService(hScm,sSrvName.c_str(),GENERIC_EXECUTE);
            ControlService(hSrv,SERVICE_CONTROL_CONTINUE,&ss);

        }
    }
    ::SetCursor(LoadCursor(NULL,IDC_ARROW));
    CloseServiceHandle(hSrv);
//    QueryService();
}







에스프레소 님이 쓰신 글 :
: 인스톨 쉴드 작업을 해서 윈도우 서비스 프로그램에 실행 파일을 등록했습니다.
:
: 윈도우 실행시 자동으로 실행이 되는데요...
:
: 소스 코드상에서 실행되고 있는 프로세스를 올리고 내리는 컨트롤을 하고 싶습니다.
:
: 현재 실행중인 특정 프로세스의 실행과 종료를 제어 할 수 있는 방법이 없을까요?
:
: 고수님들의 의견을 부탁 드립니다.

+ -

관련 글 리스트
47032 프로세스 컨트롤에 대한 질문 입니다. 에스프레소 989 2006/11/09
47038     Re:프로세스 컨트롤에 대한 질문 입니다. 장성호 1582 2006/11/10
47040         Re:Re:프로세스 컨트롤에 대한 질문 입니다. 에스프레소 1353 2006/11/10
47037     Re:프로세스 컨트롤에 대한 질문 입니다. 강재호.만해 1390 2006/11/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.