|
저도 그런경우가 있었는데요
MySQL을 서비스에서 자동시작으로 설정해 놓아도
Mysql보다 내가 만든 프로그램이 먼저 실행되는 경우가 있더라구요
더 좋은 방법이 있는지 모르겠지만(시작프로그램이나 서비스의 실행순서를 지정하는 방법이 있다면...?)
저는 그냥 프로그램에서 MySql서비스가 제대로 시작되었는지 확인하는 코딩을 넣었습니다.
아래는 코드는 Window에서 서비스를 삭제하는 함수입니다.
MySql의 상태를 체크하고 .. 실행중이면 중지 시킨후에 삭제하는 루틴으로 되어있습니다.
혹 참조가 되길 바랍니다.
static SERVICE_STATUS g_sStatus;
BOOL RemoveService()
{
String sName="MySql";
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,sName.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(sName+" Stop \n");
//printf("MySql Stop \n");
bRet = TRUE;
}
else
{
ShowMessage(sName+" failed \n");
//printf("MySql failed \n");
bRet = FALSE;
}
}
// now remove the service
if( TRUE == ::DeleteService(schService) )
{
ShowMessage(sName+" removed \n");
//printf("MySql removed \n");
bRet = TRUE;
}
else
{
ShowMessage(sName+" DeleteService failed \n");
//printf("MySql DeleteService failed \n");
bRet = FALSE;
}
::CloseServiceHandle(schService);
}
else
{
ShowMessage(sName+" OpenService failed \n");
//printf("MySql OpenService failed \n");
bRet = FALSE;
}
::CloseServiceHandle(schSCManager);
}
else
{
ShowMessage(sName+" OpenSCManager failed \n");
//printf("MySql OpenSCManager failed \n");
bRet = FALSE;
}
return bRet;
}
정 님이 쓰신 글 :
: 제목이좀 그런데용..
: 이번에 프로젝트로 디비로 데이타 관리하고 뭐 그런 프로그램을 만들었습니다. 생산에 들어가는 장비인데..
: mysql 5.0을 사용했습니다..
: 그래서 시작프로그램에 이 실행파일을 넣어서 컴이 키자마자 실행하게끔 했습니다...
: 하지만 mysql-nt 데몬이 실행을 못하고 해서 그런지 에러가 나더군요...
: 데몬을 먼저 실행하고 저 프로그램을 실행하는 방법이 있는지.....
: 답변부탁드립니다....
|