示例#1
0
/*-------------------------------------------------------------------------*/
TestService_T* CreateRandomTestService(int id)
/*-------------------------------------------------------------------------*/
{
    char ids[128];
    char serviceurl[256];
    char servicetype[256];
    char attributes[256];
    struct utsname myname;
    
    uname(&myname);  
    sprintf(ids,"slpperf%i",id);
    sprintf(serviceurl,"service:%s.x://%s:12345",ids,myname.nodename);
    sprintf(servicetype,"service:%s.x",ids);
    sprintf(attributes,"(attr1=%s-val),(attr2=%s-val),(attr3=%s-val)", ids,ids,ids);
      

    return  CreateTestService(serviceurl,servicetype,attributes);
}
示例#2
0
BOOL CreateTestServices()
{
	// Get a handle to the SCM database. 

	SC_HANDLE hScManager = OpenSCManager(
		NULL,                    // local computer
		NULL,                    // ServicesActive database 
		SC_MANAGER_ALL_ACCESS);  // full access rights

	if (hScManager == NULL)
	{
		wprintf(L"error: OpenSCManager failed (%d)\n", GetLastError());
		return false;
	}

	// Create the main test service

	std::wstring serviceCommand = gModulePath;
	serviceCommand += L" \"";
	serviceCommand += gServiceName;
	serviceCommand += L"\" \"";
	serviceCommand += gServiceDisplayName;
	serviceCommand += L"\"";

	SC_HANDLE hService = CreateTestService(
		hScManager,
		gServiceName,
		gServiceDisplayName,
		serviceCommand.c_str(),
		SERVICE_DEMAND_START
		);

	if (hService == NULL)
	{
		CloseServiceHandle(hScManager);
		return false;
	}

	// Create dependent services

	std::wstring dependencies = gServiceName;
	dependencies += (TCHAR)0;

	for (int i = 0; i < DEPENDENT_SERVICES; i++)
	{
		SC_HANDLE hDependentService = CreateTestService(
			hScManager,
			gDependentServiceNames[i].c_str(),
			gDependentServiceDisplayNames[i].c_str(),
			serviceCommand.c_str(),
			SERVICE_DISABLED,
			dependencies.c_str());

		if (hDependentService == NULL)
		{
			CloseServiceHandle(hScManager);
			return false;
		}

		// Make each dependent service depend on all of the services before it
		// for the sake of testing ServiceController.DependentServices and
		// ServiceController.ServicesDepended on. We do this by inserting the name
		// of the last dependent service created into the next dependent service's
		// dependency list before the double null.

		dependencies.insert(dependencies.end() - 1, (TCHAR)0);
		dependencies.insert(dependencies.length() - 1, gDependentServiceNames[i]);
	}

	// Attempt to start the main test service

	BOOL result = StartService(hService, 0, NULL);
	if (!result)
	{
		int error = GetLastError();
		if (error == ERROR_SERVICE_ALREADY_RUNNING)
		{
			wprintf(L"warning: Service '%s' is already running\n", gServiceName);
			result = true;
		}
		else
		{
			wprintf(L"error: StartService failed (%d)\n", error);
		}
	}

	CloseServiceHandle(hService);
	CloseServiceHandle(hScManager);
	return result;
}