Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Installing a Service

A service configuration program uses the CreateService function to install a service in the SCM database.

The SvcInstall function in the following example shows how to install a service from the service program itself. For the complete example, see Svc.cpp.

//
// Purpose: 
// Installs a service in the SCM database
//
// Parameters:
// None
// 
// Return value:
// None
//
VOID SvcInstall()
{
 SC_HANDLE schSCManager;
 SC_HANDLE schService;
 TCHAR szUnquotedPath[MAX_PATH];

 if( !GetModuleFileName( NULL, szUnquotedPath, MAX_PATH ) )
 {
 printf("Cannot install service (%d)\n", GetLastError());
 return;
 }

 // In case the path contains a space, it must be quoted so that
 // it is correctly interpreted. For example,
 // "d:\my share\myservice.exe" should be specified as
 // ""d:\my share\myservice.exe"".
 TCHAR szPath[MAX_PATH];
 StringCbPrintf(szPath, MAX_PATH, TEXT("\"%s\""), szUnquotedPath);

 // Get a handle to the SCM database. 
 
 schSCManager = OpenSCManager( 
 NULL, // local computer
 NULL, // ServicesActive database 
 SC_MANAGER_ALL_ACCESS); // full access rights 
 
 if (NULL == schSCManager) 
 {
 printf("OpenSCManager failed (%d)\n", GetLastError());
 return;
 }

 // Create the service

 schService = CreateService( 
 schSCManager, // SCM database 
 SVCNAME, // name of service 
 SVCNAME, // service name to display 
 SERVICE_ALL_ACCESS, // desired access 
 SERVICE_WIN32_OWN_PROCESS, // service type 
 SERVICE_DEMAND_START, // start type 
 SERVICE_ERROR_NORMAL, // error control type 
 szPath, // path to service's binary 
 NULL, // no load ordering group 
 NULL, // no tag identifier 
 NULL, // no dependencies 
 NULL, // LocalSystem account 
 NULL); // no password 
 
 if (schService == NULL) 
 {
 printf("CreateService failed (%d)\n", GetLastError()); 
 CloseServiceHandle(schSCManager);
 return;
 }
 else printf("Service installed successfully\n"); 

 CloseServiceHandle(schService); 
 CloseServiceHandle(schSCManager);
}

Related topics

Service Installation, Removal, and Enumeration

The Complete Service Sample


Feedback

Was this page helpful?

Additional resources