尝试开发我的第一个 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;
}