Add gui/backend support for checking running service - windows only

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/branches/gnustep_testplant_branch@38436 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Marcian Lytwyn 2015-03-26 19:53:13 +00:00
parent 6796519eb2
commit 3e1df4d6ef

View file

@ -680,6 +680,9 @@ BOOL CALLBACK LoadDisplayMonitorInfo(HMONITOR hMonitor,
[self setHandlesWindowDecorations: YES];
[self setUsesNativeTaskbar: YES];
[self isDiscoveryServiceInstalled];
[self isDiscoveryServiceRunning];
[GSTheme theme];
{ // Check user defaults
NSUserDefaults *defs;
@ -1924,7 +1927,103 @@ LRESULT CALLBACK windowEnumCallback(HWND hwnd, LPARAM lParam)
@end
@implementation WIN32Server (ServiceOps)
- (BOOL)isServiceInstalled: (NSString*)serviceName
{
BOOL result = NO;
SC_HANDLE serviceControlManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (serviceControlManager == NULL)
{
NSDebugMLLog(@"WIN32", @"cannot connect to service control manager - status: %ld", GetLastError());
NSWarnMLog(@"cannot connect to service control manager - status: %ld", GetLastError());
}
else
{
// CHeck for service running...
SC_HANDLE serviceHandle = OpenService(serviceControlManager, TEXT("Bonjour Service"), SERVICE_QUERY_STATUS);
if (serviceHandle == NULL)
{
NSDebugMLLog(@"WIN32", @"cannot open service 'Bonjour' - status: %ld", GetLastError());
NSWarnMLog(@"cannot open service 'Bonjour' - status: %ld", GetLastError());
}
else
{
NSDebugMLLog(@"WIN32", @"service 'Bonjour' is installed");
NSWarnMLog(@"service 'Bonjour' is installed");
result = YES;
// Cleanup...
CloseServiceHandle(serviceHandle);
CloseServiceHandle(serviceControlManager);
}
}
// return our result...
return result;
}
- (BOOL)isServiceRunning: (NSString*)serviceName
{
BOOL result = NO;
SC_HANDLE serviceControlManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (serviceControlManager == NULL)
{
NSDebugMLLog(@"WIN32", @"cannot connect to service control manager - status: %ld", GetLastError());
NSWarnMLog(@"cannot connect to service control manager - status: %ld", GetLastError());
}
else
{
// Check for service running...
//TCHAR *name = TEXT([serviceName UTF8String]);
SC_HANDLE serviceHandle = OpenService(serviceControlManager, TEXT("Bonjour Service"), SERVICE_QUERY_STATUS);
if (serviceHandle == NULL)
{
NSDebugMLLog(@"WIN32", @"cannot open service 'Bonjour' - status: %ld", GetLastError());
NSWarnMLog(@"cannot open service 'Bonjour' - status: %ld", GetLastError());
}
else
{
SERVICE_STATUS_PROCESS serviceStatusInfo;
DWORD ssiSize;
if (0 == QueryServiceStatusEx(serviceHandle, SC_STATUS_PROCESS_INFO, (LPBYTE)&serviceStatusInfo, sizeof(serviceStatusInfo), &ssiSize))
{
NSDebugMLLog(@"WIN32", @"cannot query service 'Bonjour' - status: %ld", GetLastError());
NSWarnMLog(@"cannot query service 'Bonjour' - status: %ld", GetLastError());
}
else
{
NSDebugMLLog(@"WIN32", @"service 'Bonjour' current state: %ld", serviceStatusInfo.dwCurrentState);
NSWarnMLog(@"service 'Bonjour' current state: %ld", serviceStatusInfo.dwCurrentState);
result = (serviceStatusInfo.dwCurrentState == SERVICE_RUNNING);
}
// Cleanup...
CloseServiceHandle(serviceHandle);
CloseServiceHandle(serviceControlManager);
}
}
// return our result...
return result;
}
- (BOOL) isDiscoveryServiceInstalled
{
return [self isServiceInstalled: @"Bonjour Service"];
}
- (BOOL) isDiscoveryServiceRunning
{
return [self isServiceRunning: @"Bonjour Service"];
}
@end
@implementation WIN32Server (WindowOps)