summaryrefslogtreecommitdiff
path: root/tests/service
diff options
context:
space:
mode:
authorAndreas Baumann <abaumann@yahoo.com>2009-03-25 14:48:51 +0100
committerAndreas Baumann <abaumann@yahoo.com>2009-03-25 14:48:51 +0100
commitd891f09be018df8a87493eb37175d57046079233 (patch)
treee55e3bf3d3491a7616bb1c2e9239c9326fb16add /tests/service
parentb165d6e741a2ffec68f1bdc1680abbc3c24aea9a (diff)
downloadwolfbones-d891f09be018df8a87493eb37175d57046079233.tar.gz
wolfbones-d891f09be018df8a87493eb37175d57046079233.tar.bz2
started to add the main service function
Diffstat (limited to 'tests/service')
-rw-r--r--tests/service/Makefile.W329
-rw-r--r--tests/service/testservice.c134
2 files changed, 82 insertions, 61 deletions
diff --git a/tests/service/Makefile.W32 b/tests/service/Makefile.W32
index 4dc3bf8..22e297d 100644
--- a/tests/service/Makefile.W32
+++ b/tests/service/Makefile.W32
@@ -30,9 +30,10 @@ testservice.rc: testservice.mc
testservice.res: testservice.rc
local_test: $(LIBRARIES)
-# @echo Testing log..
-# @copy testservice.dll C:\TEMP
-# @test_service 2>NUL
+ @echo Testing service..
+ @copy testservice.dll C:\TEMP
+ @testservice /install 2>NUL
+ @testservice /remove 2>NUL
local_all:
@@ -41,5 +42,3 @@ local_clean:
@-erase $(LIBRARIES) testservice.h 2>NUL
local_distclean:
-
-
diff --git a/tests/service/testservice.c b/tests/service/testservice.c
index fdc923b..7ccbac2 100644
--- a/tests/service/testservice.c
+++ b/tests/service/testservice.c
@@ -22,66 +22,11 @@
#define WOLF_MSG_TESTSERVICE_CANT_OPEN_SCM_FOR_UNINSTALL WOLF_MSG_TESTSERVICE_BASE+8
#define WOLF_MSG_TESTSERVICE_CANT_OPEN_SERVICE WOLF_MSG_TESTSERVICE_BASE+9
#define WOLF_MSG_TESTSERVICE_CANT_DELETE_SERVICE WOLF_MSG_TESTSERVICE_BASE+10
+#define WOLF_MSG_TESTSERVICE_CANT_DISPATCH_SERVICE WOLF_MSG_TESTSERVICE_BASE+11
#define SERVICE_NAME "testservice"
#define SERVICE_NAME_DESCR "Wolf Test Service"
-static wolf_error_t wolf_service_remove( LPCTSTR service_name ) {
- SC_HANDLE scm;
- char errbuf[512];
- SC_HANDLE service;
- DWORD res;
-
- wolf_log( WOLF_LOG_DEBUG, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_UNINSTALLING_SERVICE,
- _( "Unistalling service '%s'" ), service_name );
-
- /* get service control manager with enough rights on the local
- * machine to uninstall the service
- */
- scm = (SC_HANDLE)OpenSCManager(
- NULL, /* local computer */
- SERVICES_ACTIVE_DATABASE,
- SC_MANAGER_ALL_ACCESS );
-
- if( scm == NULL ) {
- WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
- wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_OPEN_SCM_FOR_UNINSTALL,
- _( "Unable to open the service control manager to uninstall '%s': %s (%d)" ),
- service_name, errbuf, GetLastError( ) );
- return WOLF_ERR_INTERNAL;
- }
-
- /* open the service handle and delete the service */
- service = OpenService( scm, service_name, SERVICE_ALL_ACCESS );
-
- if( service == NULL ) {
- WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
- wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_OPEN_SERVICE,
- _( "Unable to open service '%s': %s (%d)" ),
- service_name, errbuf, GetLastError( ) );
- CloseServiceHandle( scm );
- return WOLF_ERR_INTERNAL;
- }
-
- res = DeleteService( service );
- if( res == 0 ) {
- WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
- wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_DELETE_SERVICE,
- _( "Unable to uninstall service '%s': %s (%d)" ),
- service_name, errbuf, GetLastError( ) );
- CloseServiceHandle( service );
- CloseServiceHandle( scm );
- return WOLF_ERR_INTERNAL;
- }
-
- CloseServiceHandle( service );
- CloseServiceHandle( scm );
-
- wolf_log( WOLF_LOG_DEBUG, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_SERVICE_UNINSTALLED,
- _( "Service '%s' uninstalled successfully" ), service_name );
-
- return WOLF_OK;
-}
static wolf_error_t wolf_service_install( LPCTSTR service_name,
LPCTSTR service_name_descr ) {
@@ -159,13 +104,90 @@ static wolf_error_t wolf_service_install( LPCTSTR service_name,
return WOLF_OK;
}
+static wolf_error_t wolf_service_remove( LPCTSTR service_name ) {
+ SC_HANDLE scm;
+ char errbuf[512];
+ SC_HANDLE service;
+ DWORD res;
+
+ wolf_log( WOLF_LOG_DEBUG, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_UNINSTALLING_SERVICE,
+ _( "Unistalling service '%s'" ), service_name );
+
+ /* get service control manager with enough rights on the local
+ * machine to uninstall the service
+ */
+ scm = (SC_HANDLE)OpenSCManager(
+ NULL, /* local computer */
+ SERVICES_ACTIVE_DATABASE,
+ SC_MANAGER_ALL_ACCESS );
+
+ if( scm == NULL ) {
+ WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
+ wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_OPEN_SCM_FOR_UNINSTALL,
+ _( "Unable to open the service control manager to uninstall '%s': %s (%d)" ),
+ service_name, errbuf, GetLastError( ) );
+ return WOLF_ERR_INTERNAL;
+ }
+
+ /* open the service handle and delete the service */
+ service = OpenService( scm, service_name, SERVICE_ALL_ACCESS );
+
+ if( service == NULL ) {
+ WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
+ wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_OPEN_SERVICE,
+ _( "Unable to open service '%s': %s (%d)" ),
+ service_name, errbuf, GetLastError( ) );
+ CloseServiceHandle( scm );
+ return WOLF_ERR_INTERNAL;
+ }
+
+ res = DeleteService( service );
+ if( res == 0 ) {
+ WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
+ wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_DELETE_SERVICE,
+ _( "Unable to uninstall service '%s': %s (%d)" ),
+ service_name, errbuf, GetLastError( ) );
+ CloseServiceHandle( service );
+ CloseServiceHandle( scm );
+ return WOLF_ERR_INTERNAL;
+ }
+
+ CloseServiceHandle( service );
+ CloseServiceHandle( scm );
+
+ wolf_log( WOLF_LOG_DEBUG, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_SERVICE_UNINSTALLED,
+ _( "Service '%s' uninstalled successfully" ), service_name );
+
+ return WOLF_OK;
+}
+
+void WINAPI wolf_service_main( DWORD argc, LPTSTR *argv ) {
+ return;
+}
+
void __cdecl _tmain( int argc, TCHAR *argv[] ) {
+ char errbuf[512];
+
wolf_log_openlogtostderr( WOLF_LOG_DEBUG );
wolf_log_openlogtofile( "testservice.log", WOLF_LOG_NOTICE );
wolf_log_openlogtoeventlog( NULL, "Application", "testservice",
"C:\\Temp\\testsrevice.dll", 3, WOLF_LOG_NOTICE );
+ /* called as service, dispatch the main service thread */
if( argc < 2 ) {
+ SERVICE_TABLE_ENTRY dispatch_table[2] =
+ { { SERVICE_NAME, wolf_service_main },
+ { NULL, NULL } };
+ BOOL res;
+
+ res = StartServiceCtrlDispatcher( dispatch_table );
+ if( !res ) {
+ WOLF_LOG_GET_LAST_ERROR( GetLastError( ), errbuf, 512 );
+ wolf_log( WOLF_LOG_ERR, WOLF_CATEGORY_TESTSERVICE, WOLF_MSG_TESTSERVICE_CANT_DISPATCH_SERVICE,
+ _( "Unable to dispatch service '%s': %s (%d)" ),
+ SERVICE_NAME, errbuf, GetLastError( ) );
+ }
+
return;
}