#include <winsvc.h>
else
{
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
// 选择重试后重启hasp加密锁服务,并暂停10s 后登录
// 打开服务管理对象
SC_HANDLE hSC = ::OpenSCManager( NULL,
NULL, GENERIC_EXECUTE);
if( hSC == NULL)
{
TRACE(_T("open SCManager error") );
//return FALSE;
}
else
{
// 打开HASP加密锁服务。
SC_HANDLE hSvc = ::OpenService( hSC, _T("hasplms"),
SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
if( hSvc == NULL)
{
TRACE( _T("Open hasplms erron。"));
::CloseServiceHandle( hSC);
}
else
{
// 获得服务的状态
SERVICE_STATUS status;
if( ::QueryServiceStatus( hSvc, &status) == FALSE)
{
TRACE( _T("Get Service state error。"));
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
}
else
{
if (status.dwCurrentState == SERVICE_RUNNING)
{
// 停止服务
if( ::ControlService( hSvc,
SERVICE_CONTROL_STOP, &status) == FALSE)
{
TRACE( "stop service error。");
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
}
// 等待服务停止
while( ::QueryServiceStatus( hSvc, &status) == TRUE)
{
::Sleep( status.dwWaitHint);
if( status.dwCurrentState == SERVICE_STOPPED)
{
//AfxMessageBox( _T("stop success。"));
::Sleep(5000);
break;
}
}
}
// 不管服务处于什么状态都要启动服务或者重启服务
// 启动服务
if( ::StartService( hSvc, NULL, NULL) == FALSE)
{
TRACE( _T("start service error。"));
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
}
else
{
// 等待服务启动
while( ::QueryServiceStatus( hSvc, &status) == TRUE)
{
::Sleep( status.dwWaitHint);
if( status.dwCurrentState == SERVICE_RUNNING)
{
//AfxMessageBox( _T("start success。"));
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
::Sleep(10000);
}
}
}
}
}
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}
}