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
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs