Author: mlytwyn Date: Thu Mar 26 20:53:13 2015 New Revision: 38436 URL: http://svn.gna.org/viewcvs/gnustep?rev=38436&view=rev Log: Add gui/backend support for checking running service - windows only
Modified: libs/back/branches/gnustep_testplant_branch/Source/win32/WIN32Server.m Modified: libs/back/branches/gnustep_testplant_branch/Source/win32/WIN32Server.m URL: http://svn.gna.org/viewcvs/gnustep/libs/back/branches/gnustep_testplant_branch/Source/win32/WIN32Server.m?rev=38436&r1=38435&r2=38436&view=diff ============================================================================== --- libs/back/branches/gnustep_testplant_branch/Source/win32/WIN32Server.m (original) +++ libs/back/branches/gnustep_testplant_branch/Source/win32/WIN32Server.m Thu Mar 26 20:53:13 2015 @@ -679,6 +679,9 @@ [self setHandlesWindowDecorations: YES]; [self setUsesNativeTaskbar: YES]; + + [self isDiscoveryServiceInstalled]; + [self isDiscoveryServiceRunning]; [GSTheme theme]; { // Check user defaults @@ -1924,7 +1927,103 @@ @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) _______________________________________________ Gnustep-cvs mailing list Gnustep-cvs@gna.org https://mail.gna.org/listinfo/gnustep-cvs