系统服务的处理(C++版)
来源:互联网 发布:unity3d 输出日志 编辑:程序博客网 时间:2024/05/13 21:54
int __fastcall Server_Servers::QueryServerStats(AnsiString SERV,AnsiString Service)
...{
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
SC_HANDLE schService , schSCManager ;
schSCManager = OpenSCManager(
SERV.c_str(), // pointer to machine name string
NULL, // pointer to database name string
SC_MANAGER_ALL_ACCESS // type of access
);
schService = OpenService(
schSCManager, // SCM database
Service.c_str(), // service name Topsky_ServerService
SERVICE_ALL_ACCESS);
if (schService == NULL)
...{
PMSGDLG->ShowErrorMsg("服务不存在!");
return -1;
}
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return -1;
}
else
return ssStatus.dwCurrentState;
}
//启动服务
void __fastcall Server_Servers::StartServerServers(AnsiString SERV,AnsiString Service)
...{
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
SC_HANDLE schService , schSCManager ;
schSCManager = OpenSCManager(
SERV.c_str(), // pointer to machine name string
NULL, // pointer to database name string
SC_MANAGER_ALL_ACCESS // type of access
);
schService = OpenService(
schSCManager, // SCM database
Service.c_str(), // service name Topsky_ServerService
SERVICE_ALL_ACCESS);
if (schService == NULL)
...{
PMSGDLG->ShowErrorMsg("服务不存在!");
return ;
}
if (!StartService(schService, 0, NULL)) //
...{
PMSGDLG->ShowErrorMsg("无法启动服务!");
return ;
}
else
;// PMSGDLG->ShowErrorMsg("服务正在启动...");
// Check the status until the service is no longer start pending.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return ;
}
while (ssStatus.dwCurrentState == SERVICE_START_PENDING)
...{
// Save the current checkpoint.
dwOldCheckPoint = ssStatus.dwCheckPoint;
// Wait for the specified interval.
Sleep(ssStatus.dwWaitHint);
// Check the status again.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
break;
// Break if the checkpoint has not been incremented.
if (dwOldCheckPoint >= ssStatus.dwCheckPoint)
break;
}
if (ssStatus.dwCurrentState == SERVICE_RUNNING)
;// PMSGDLG->ShowErrorMsg("启动服务成功!");
else
...{
PMSGDLG->ShowErrorMsg("CurrentState: " + AnsiString(ssStatus.dwCurrentState));
PMSGDLG->ShowErrorMsg("Win32ExitCode: " + AnsiString(ssStatus.dwWin32ExitCode));
PMSGDLG->ShowErrorMsg("ServiceSpecificExitCode: " + AnsiString(ssStatus.dwServiceSpecificExitCode));
PMSGDLG->ShowErrorMsg("CheckPoint: " + AnsiString( ssStatus.dwCheckPoint));
PMSGDLG->ShowErrorMsg("WaitHint: " + AnsiString( ssStatus.dwWaitHint));
}
CloseServiceHandle(schService);
}
//停止服务
void __fastcall Server_Servers::StopServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_STOP | SERVICE_QUERY_STATUS);
if (schService != NULL)
...{
ControlService(schService, SERVICE_CONTROL_STOP, &ssStatus);
Sleep(2000);
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return ;
}
while (ssStatus.dwCurrentState == SERVICE_STOP_PENDING)
...{
// Save the current checkpoint.
dwOldCheckPoint = ssStatus.dwCheckPoint;
// Wait for the specified interval.
Sleep(ssStatus.dwWaitHint);
// Check the status again.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
break;
// Break if the checkpoint has not been incremented.
if (dwOldCheckPoint >= ssStatus.dwCheckPoint)
break;
}
if (ssStatus.dwCurrentState == SERVICE_STOPPED)
;// PMSGDLG->ShowErrorMsg("停止服务成功!");
else
...{
PMSGDLG->ShowErrorMsg("CurrentState: " + AnsiString(ssStatus.dwCurrentState));
PMSGDLG->ShowErrorMsg("Win32ExitCode: " + AnsiString(ssStatus.dwWin32ExitCode));
PMSGDLG->ShowErrorMsg("ServiceSpecificExitCode: " + AnsiString(ssStatus.dwServiceSpecificExitCode));
PMSGDLG->ShowErrorMsg("CheckPoint: " + AnsiString( ssStatus.dwCheckPoint));
PMSGDLG->ShowErrorMsg("WaitHint: " + AnsiString( ssStatus.dwWaitHint));
}
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//暂停服务
void __fastcall Server_Servers::PauseServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_PAUSE_CONTINUE);
if (schService != NULL)
...{
ControlService(schService, SERVICE_CONTROL_PAUSE, &ssStatus);
Sleep(3000);
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//继续服务
void __fastcall Server_Servers::ContinueServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ServiceStatus;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_PAUSE_CONTINUE);
if (schService != NULL)
...{
QueryServiceStatus(schService, &ServiceStatus);
ControlService(schService, SERVICE_CONTROL_CONTINUE, &ServiceStatus);
Sleep(3000);
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//取得网上邻居
bool __fastcall Server_Servers::EnumHosts(NETRESOURCE* pNetRes)
...{
HANDLE hEnum = NULL;
DWORD dwRet= WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pNetRes, &hEnum);
if (dwRet != NO_ERROR)
return false;
NETRESOURCE* pResBuf = new NETRESOURCE[8];
DWORD cCount, dwBuf = 8*sizeof( NETRESOURCE);
DWORD i;
do
...{
cCount = (DWORD)-1;
dwRet = WNetEnumResource(hEnum, &cCount, (LPVOID)pResBuf, &dwBuf);
for ( i = 0; i < cCount; ++i)
...{
;// AddHostToVector(&pResBuf[i]);
}
if(pResBuf[i].dwUsage & RESOURCEUSAGE_CONTAINER)
EnumHosts(&pResBuf[i]);
if (dwRet == ERROR_NO_MORE_ITEMS)
...{ //Enum finished.
dwRet = NO_ERROR;
break;
}
else if (dwRet != NO_ERROR)
break;
}
while (dwRet == NO_ERROR);
delete pResBuf;
return (dwRet == NO_ERROR);
}
...{
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
SC_HANDLE schService , schSCManager ;
schSCManager = OpenSCManager(
SERV.c_str(), // pointer to machine name string
NULL, // pointer to database name string
SC_MANAGER_ALL_ACCESS // type of access
);
schService = OpenService(
schSCManager, // SCM database
Service.c_str(), // service name Topsky_ServerService
SERVICE_ALL_ACCESS);
if (schService == NULL)
...{
PMSGDLG->ShowErrorMsg("服务不存在!");
return -1;
}
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return -1;
}
else
return ssStatus.dwCurrentState;
}
//启动服务
void __fastcall Server_Servers::StartServerServers(AnsiString SERV,AnsiString Service)
...{
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
SC_HANDLE schService , schSCManager ;
schSCManager = OpenSCManager(
SERV.c_str(), // pointer to machine name string
NULL, // pointer to database name string
SC_MANAGER_ALL_ACCESS // type of access
);
schService = OpenService(
schSCManager, // SCM database
Service.c_str(), // service name Topsky_ServerService
SERVICE_ALL_ACCESS);
if (schService == NULL)
...{
PMSGDLG->ShowErrorMsg("服务不存在!");
return ;
}
if (!StartService(schService, 0, NULL)) //
...{
PMSGDLG->ShowErrorMsg("无法启动服务!");
return ;
}
else
;// PMSGDLG->ShowErrorMsg("服务正在启动...");
// Check the status until the service is no longer start pending.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return ;
}
while (ssStatus.dwCurrentState == SERVICE_START_PENDING)
...{
// Save the current checkpoint.
dwOldCheckPoint = ssStatus.dwCheckPoint;
// Wait for the specified interval.
Sleep(ssStatus.dwWaitHint);
// Check the status again.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
break;
// Break if the checkpoint has not been incremented.
if (dwOldCheckPoint >= ssStatus.dwCheckPoint)
break;
}
if (ssStatus.dwCurrentState == SERVICE_RUNNING)
;// PMSGDLG->ShowErrorMsg("启动服务成功!");
else
...{
PMSGDLG->ShowErrorMsg("CurrentState: " + AnsiString(ssStatus.dwCurrentState));
PMSGDLG->ShowErrorMsg("Win32ExitCode: " + AnsiString(ssStatus.dwWin32ExitCode));
PMSGDLG->ShowErrorMsg("ServiceSpecificExitCode: " + AnsiString(ssStatus.dwServiceSpecificExitCode));
PMSGDLG->ShowErrorMsg("CheckPoint: " + AnsiString( ssStatus.dwCheckPoint));
PMSGDLG->ShowErrorMsg("WaitHint: " + AnsiString( ssStatus.dwWaitHint));
}
CloseServiceHandle(schService);
}
//停止服务
void __fastcall Server_Servers::StopServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_STOP | SERVICE_QUERY_STATUS);
if (schService != NULL)
...{
ControlService(schService, SERVICE_CONTROL_STOP, &ssStatus);
Sleep(2000);
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
...{
PMSGDLG->ShowErrorMsg("查询服务状态失败!");
return ;
}
while (ssStatus.dwCurrentState == SERVICE_STOP_PENDING)
...{
// Save the current checkpoint.
dwOldCheckPoint = ssStatus.dwCheckPoint;
// Wait for the specified interval.
Sleep(ssStatus.dwWaitHint);
// Check the status again.
if (!QueryServiceStatus(
schService, // handle to service
&ssStatus) ) // address of status information
break;
// Break if the checkpoint has not been incremented.
if (dwOldCheckPoint >= ssStatus.dwCheckPoint)
break;
}
if (ssStatus.dwCurrentState == SERVICE_STOPPED)
;// PMSGDLG->ShowErrorMsg("停止服务成功!");
else
...{
PMSGDLG->ShowErrorMsg("CurrentState: " + AnsiString(ssStatus.dwCurrentState));
PMSGDLG->ShowErrorMsg("Win32ExitCode: " + AnsiString(ssStatus.dwWin32ExitCode));
PMSGDLG->ShowErrorMsg("ServiceSpecificExitCode: " + AnsiString(ssStatus.dwServiceSpecificExitCode));
PMSGDLG->ShowErrorMsg("CheckPoint: " + AnsiString( ssStatus.dwCheckPoint));
PMSGDLG->ShowErrorMsg("WaitHint: " + AnsiString( ssStatus.dwWaitHint));
}
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//暂停服务
void __fastcall Server_Servers::PauseServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ssStatus;
DWORD dwOldCheckPoint;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_PAUSE_CONTINUE);
if (schService != NULL)
...{
ControlService(schService, SERVICE_CONTROL_PAUSE, &ssStatus);
Sleep(3000);
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//继续服务
void __fastcall Server_Servers::ContinueServerServers(AnsiString SERV,AnsiString Service)
...{
SC_HANDLE schSCManager , schService ;
SERVICE_STATUS ServiceStatus;
schSCManager = OpenSCManager(SERV.c_str(), NULL, SC_MANAGER_ALL_ACCESS);
if (schSCManager != NULL)
...{
schService = OpenService(schSCManager, Service.c_str(), SERVICE_PAUSE_CONTINUE);
if (schService != NULL)
...{
QueryServiceStatus(schService, &ServiceStatus);
ControlService(schService, SERVICE_CONTROL_CONTINUE, &ServiceStatus);
Sleep(3000);
CloseServiceHandle(schService);
}
CloseServiceHandle(schSCManager);
}
}
//取得网上邻居
bool __fastcall Server_Servers::EnumHosts(NETRESOURCE* pNetRes)
...{
HANDLE hEnum = NULL;
DWORD dwRet= WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, pNetRes, &hEnum);
if (dwRet != NO_ERROR)
return false;
NETRESOURCE* pResBuf = new NETRESOURCE[8];
DWORD cCount, dwBuf = 8*sizeof( NETRESOURCE);
DWORD i;
do
...{
cCount = (DWORD)-1;
dwRet = WNetEnumResource(hEnum, &cCount, (LPVOID)pResBuf, &dwBuf);
for ( i = 0; i < cCount; ++i)
...{
;// AddHostToVector(&pResBuf[i]);
}
if(pResBuf[i].dwUsage & RESOURCEUSAGE_CONTAINER)
EnumHosts(&pResBuf[i]);
if (dwRet == ERROR_NO_MORE_ITEMS)
...{ //Enum finished.
dwRet = NO_ERROR;
break;
}
else if (dwRet != NO_ERROR)
break;
}
while (dwRet == NO_ERROR);
delete pResBuf;
return (dwRet == NO_ERROR);
}
- 系统服务的处理(C++版)
- C#,系统服务
- 批处理,bat,系统服务处理
- 用C语言编写 Windows 服务程序的五个步骤以及服务编程常见问题处理
- 纳税服务系统【异常处理、抽取BaseAction】
- linux的系统服务
- RHEL的系统服务
- 系统开启的服务
- windows 系统的服务
- 系统服务的卸载
- Linux的系统服务
- android的系统服务
- 系统服务的类型
- Android的系统服务
- Android的系统服务
- 常用的系统服务:
- 系统服务的控制
- 系统服务的控制
- 面向电子政务的SOA总体技术架构与解决方案的理论进展报道
- .net如何统计在线人数
- 考IELTS的好去处(更新中。。)
- 研究EXCEL 2000
- 学习十七大精神(1)
- 系统服务的处理(C++版)
- 有关Motorola J2ME开发的几个细节问题
- 我的收藏夹
- java中产生随机数
- 学习十七大精神(2)
- 基于 SOA 的区域电子政务解决方案之电子政务趋势
- java持久性 链接数据库的几种优缺点
- 如何与人进行有效沟通
- 毕业实习(4)