3

初めての 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;
}
4

2 に答える 2

2

この投稿は正しく答えます。サービスを「サービスとして」開始しない限り、機能しません。

登録する必要があります。これを行うには、このファイルを見てください。これは、オープン ソースである Apple bonjour サービスの実装です。

サービスをインストールするために何をしなければならないかについての良いアイデアを提供します。特にメソッド InstallService - および RemoveService (削除する場合)。

于 2016-10-28T15:41:06.853 に答える
0

サービスは、登録のプロパティで指定されたアカウントで実行されます。サービスを登録または開始するアカウントとは異なる場合があります。これについて読む。

多くのサービスは、機能が非常に制限された「ネットワーク サービス」アカウントで実行されます。多くのサービスがネットワークからの要求を処理するため、これは理にかなっています。これが、Microsoft がデフォルトで「ネットワーク サービス」を選択した理由です。

于 2013-06-29T07:56:49.237 に答える