C ++ Windows Service Ошибка 1063

Пытаюсь разработать свою первую службу Windows, и я отлаживаю в Windows 7 MS VC ++ 10.0. Как только он вызывает StartServiceCtrlDispatcher (), я получаю сообщение об ошибке 1063, и он говорит, что доступ запрещен. Я администратор, как именно мне пройти это? Я новичок в сфере услуг. Благодарю. Код:

// For WinXp, don't forget to link to
// Advapi32.lib library if needed...

#define _WIN32_WINNT 0x0501

#include <windows.h>

#include <stdio.h>
#include <tchar.h>

// Prototypes, just empty skeletons...

void SvcDebugOut(LPSTR String, DWORD Status);
void  WINAPI MyServiceCtrlHandler(DWORD opcode);
void  MyServiceStart(DWORD argc, LPTSTR *argv);
DWORD MyServiceInitialization(DWORD argc, LPTSTR *argv, DWORD *specificError);

void main()
{

// Using 2-D array as a table...

// The name of a service to be run in this service process - "MyService",

// The function as the starting point for a service - MyServiceStart or

// a pointer to a ServiceMain() function...

// The members of the last entry in the table must have NULL values

// to designate the end of the table...

SERVICE_TABLE_ENTRY  DispatchTable[] = {{_TEXT("MyService"), (LPSERVICE_MAIN_FUNCTION)MyServiceStart}, {NULL, NULL}};
if (!StartServiceCtrlDispatcher(DispatchTable))
SvcDebugOut("StartServiceCtrlDispatcher() failed, error: %d\n", GetLastError());
else
printf("StartServiceCtrlDispatcher() looks OK.\n");
return;
}

// ==========================================================================
// Prototype definitions...just skeletons here...
void  WINAPI MyServiceCtrlHandler(DWORD opcode)
{
// Service control information here...
return;
}

void  MyServiceStart(DWORD argc, LPTSTR *argv)
{
// Starting service information here...
return;
}DWORD MyServiceInitialization(DWORD argc, LPTSTR *argv, DWORD *specificError)
{
// Service initialization information here...
return 0;
}

// Very simple info to the standard output...
void SvcDebugOut(LPSTR String, DWORD Status)
{
CHAR  Buffer[1024];
printf("In SvcDebugOut() lol!\n");
if (strlen(String) < 1000)
{
sprintf(Buffer, String, Status);
OutputDebugStringA(Buffer);
}
else
printf("String too long...\n");
return;
}

3

Решение

это сообщение отвечает правильно. Пока вы не запустите сервис «как сервис», он не будет работать.

Вы должны зарегистрировать это. Для этого посмотрите на это файл, это реализация сервиса Apple Bonjour с открытым исходным кодом.

Это дает хорошее представление о том, что необходимо сделать для установки службы. Особенно метод InstallService — и RemoveService (если вы хотите его удалить).

1

Другие решения

Сервисы запускаются под учетной записью, указанной в свойствах их регистрации. Это может не совпадать с учетной записью, которая регистрирует службу или запускает ее. Читает об этом.

Многие сервисы работают под учетной записью «Сетевой сервис», которая имеет очень ограниченные возможности. Это имеет смысл, поскольку многие службы обрабатывают запросы, поступающие из сети. Вот почему «Сетевой сервис» был выбран Microsoft по умолчанию.

0

По вопросам рекламы [email protected]