usage.append (COMMAND_NAME);
usage.append (" [ [ options ] | [ configProperty=value, ... ] ]\n");
usage.append (" options\n");
- usage.append (" -v - displays CIM Server version number\n");
- usage.append (" -h - prints this help message\n");
- usage.append (" -s - shuts down CIM Server\n");
+ usage.append (" -v - displays CIM Server version number\n");
+ usage.append (" -h - prints this help message\n");
+ usage.append (" -s - shuts down CIM Server\n");
#if !defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
- usage.append (" -D [home] - sets pegasus home directory\n");
+ usage.append (" -D [home] - sets pegasus home directory\n");
#endif
#if defined(PEGASUS_OS_TYPE_WINDOWS)
- usage.append (" -install - installs pegasus as a Windows NT Service\n");
- usage.append (" -remove - removes pegasus as a Windows NT Service\n");
- usage.append (" -start - starts pegasus as a Windows NT Service\n");
- usage.append (" -stop - stops pegasus as a Windows NT Service\n");
+ usage.append (" -install [name] - installs pegasus as a Windows NT Service\n");
+ usage.append (" [name] is optional and overrides the\n");
+ usage.append (" default CIM Server Service Name\n");
+ usage.append (" -remove [name] - removes pegasus as a Windows NT Service\n");
+ usage.append (" [name] is optional and overrides the\n");
+ usage.append (" default CIM Server Service Name\n");
+ usage.append (" -start [name] - starts pegasus as a Windows NT Service\n");
+ usage.append (" [name] is optional and overrides the\n");
+ usage.append (" default CIM Server Service Name\n");
+ usage.append (" -stop [name] - stops pegasus as a Windows NT Service\n");
+ usage.append (" [name] is optional and overrides the\n");
+ usage.append (" default CIM Server Service Name\n\n");
#endif
usage.append (" configProperty=value\n");
- usage.append (" - sets CIM Server configuration property\n");
+ usage.append (" - sets CIM Server configuration property\n");
cout << endl;
#if defined(PEGASUS_OS_HPUX) || defined(PEGASUS_PLATFORM_LINUX_IA64_GNU)
//
// Install as a NT service
//
- if(cimserver_install_nt_service())
+ char *opt_arg = NULL;
+ if (i+1 < argc)
+ {
+ opt_arg = argv[i+1];
+
+ }
+ if(cimserver_install_nt_service(opt_arg))
{
cout << "\nPegasus installed as NT Service";
exit(0);
//
// Remove Pegasus as an NT service
//
- if(cimserver_remove_nt_service())
+ char *opt_arg = NULL;
+ if (i+1 < argc)
+ {
+ opt_arg = argv[i+1];
+ }
+ if(cimserver_remove_nt_service(opt_arg))
{
cout << "\nPegasus removed as NT Service";
exit(0);
//
// Start as a NT service
//
- if(cimserver_start_nt_service())
+ char *opt_arg = NULL;
+ if (i+1 < argc)
+ {
+ opt_arg = argv[i+1];
+ }
+ if(cimserver_start_nt_service(opt_arg))
{
cout << "\nPegasus started as NT Service";
exit(0);
//
// Stop as a NT service
//
- if(cimserver_stop_nt_service())
+ char *opt_arg = NULL;
+ if (i+1 < argc)
+ {
+ opt_arg = argv[i+1];
+ }
+ if(cimserver_stop_nt_service(opt_arg))
{
cout << "\nPegasus stopped as NT Service";
exit(0);
CIMServer *server_windows;
static Service pegasus_service(PEGASUS_SERVICE_NAME);
static HANDLE pegasus_service_event;
-static LPCSTR g_cimservice_key = TEXT("SYSTEM\\CurrentControlSet\\Services\\cimserver");
+static LPCSTR g_cimservice_key = TEXT("SYSTEM\\CurrentControlSet\\Services\\%s");
static LPCSTR g_cimservice_home = TEXT("home");
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
// INSTALL
//-------------------------------------------------------------------------
-bool cimserver_install_nt_service(void)
+bool cimserver_install_nt_service(char *service_name)
{
Service::ReturnCode status = Service::SERVICE_RETURN_SUCCESS;
- char filename[_MAX_PATH];
+ char filename[_MAX_PATH] = {0};
+ char displayname[_MAX_PATH] = {0};
+
+ // If service name is specified, override default
+ if (service_name == NULL)
+ {
+ strcpy(displayname, PEGASUS_DISPLAY_NAME);
+ }
+ else
+ {
+ pegasus_service.SetServiceName(service_name);
+ sprintf(displayname, "%s - %s", PEGASUS_DISPLAY_NAME, service_name);
+ }
GetModuleFileName(NULL, filename, sizeof(filename));
- status = pegasus_service.Install(PEGASUS_DISPLAY_NAME, PEGASUS_DESCRIPTION, filename);
+ status = pegasus_service.Install(displayname, PEGASUS_DESCRIPTION, filename);
// Upon success, set home in registry
if (status == Service::SERVICE_RETURN_SUCCESS)
//-------------------------------------------------------------------------
// REMOVE
//-------------------------------------------------------------------------
-bool cimserver_remove_nt_service(void)
+bool cimserver_remove_nt_service(char *service_name)
{
Service::ReturnCode status = Service::SERVICE_RETURN_SUCCESS;
+ // If service name is specified, override default
+ if (service_name != NULL)
+ {
+ pegasus_service.SetServiceName(service_name);
+ }
+
status = pegasus_service.Remove();
return (status == Service::SERVICE_RETURN_SUCCESS) ? true : false;
//-------------------------------------------------------------------------
// START
//-------------------------------------------------------------------------
-bool cimserver_start_nt_service(void)
+bool cimserver_start_nt_service(char *service_name)
{
Service::ReturnCode status = Service::SERVICE_RETURN_SUCCESS;
+ // If service name is specified, override default
+ if (service_name != NULL)
+ {
+ pegasus_service.SetServiceName(service_name);
+ }
+
status = pegasus_service.Start(5);
return (status == Service::SERVICE_RETURN_SUCCESS) ? true : false;
//-------------------------------------------------------------------------
// STOP
//-------------------------------------------------------------------------
-bool cimserver_stop_nt_service(void)
+bool cimserver_stop_nt_service(char *service_name)
{
Service::ReturnCode status = Service::SERVICE_RETURN_SUCCESS;
+ // If service name is specified, override default
+ if (service_name != NULL)
+ {
+ pegasus_service.SetServiceName(service_name);
+ }
+
status = pegasus_service.Stop(5);
return (status == Service::SERVICE_RETURN_SUCCESS) ? true : false;
{
HKEY hKey;
DWORD dw = _MAX_PATH;
+ char subKey[_MAX_PATH] = {0};
+
+ sprintf(subKey, g_cimservice_key, pegasus_service.GetServiceName());
if ((RegOpenKeyEx(HKEY_LOCAL_MACHINE,
- g_cimservice_key,
+ subKey,
0,
KEY_READ,
&hKey)) != ERROR_SUCCESS)
HKEY hKey;
DWORD dw = _MAX_PATH;
char home_key[_MAX_PATH] = {0};
+ char subKey[_MAX_PATH] = {0};
if (lpchKeyword == NULL || lpchValue == NULL)
return false;
- if ((RegCreateKeyEx (HKEY_LOCAL_MACHINE,
- g_cimservice_key,
+ sprintf(subKey, g_cimservice_key, pegasus_service.GetServiceName());
+
+ if ((RegCreateKeyEx (HKEY_LOCAL_MACHINE,
+ subKey,
0,
NULL,
0,