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

Reply via email to