ServiceBase.OnStart メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > ServiceBase.OnStart メソッドの意味・解説 

ServiceBase.OnStart メソッド

派生クラスに実装されると、Start コマンドがサービス コントロール マネージャ (SCM) によってサービスに送信されるとき、またはオペレーティング システムが (自動的に起動するサービスのために) 起動するときに実行されます。サービスが開始するときに実行されるアクションを指定します。

名前空間: System.ServiceProcess
アセンブリ: System.ServiceProcess (system.serviceprocess.dll 内)
構文構文

Protected Overridable Sub
 OnStart ( _
    args As String() _
)
Dim args As String()

Me.OnStart(args)
protected virtual void OnStart (
    string[] args
)
protected:
virtual void OnStart (
    array<String^>^ args
)
protected void OnStart (
    String[] args
)
protected function OnStart (
    args : String[]
)

パラメータ

args

Start コマンドによって渡されたデータ。

解説解説

OnStart を使用して、サービスが Start コマンドを受け取ったときに発生する処理を指定します。OnStart は、サービスの動作を指定するメソッドです。OnStart は、データを渡す方法として引数をとることができますが、この方法はほとんど使用されません。

注意に関するメモ注意

OnStart で行う必要がある処理をコンストラクタを使用して実行しないでください。OnStart を使用して、サービスの初期化をすべて処理します。コンストラクタは、サービスが実行されているときではなく、アプリケーションの実行可能ファイルが実行されているときに、呼び出されます。実行可能ファイルは OnStart の前に実行されます。たとえば、継続する場合、オブジェクトは SCM で既にメモリに格納されているため、コンストラクタは再度呼び出されません。OnStop が OnStart に割り当てられたリソースではなく、コンストラクタに割り当てられたリソースを解放する場合は、2 度目にサービスを呼び出すときに、必要なリソースが再作成されません。

サービスのインストーラで StartType を設定すると、コンピュータの再起動時にサービスを設定できます。このような場合は、システムの起動時に OnStart が呼び出されます。

OnStart は、派生クラスでオーバーライドされます。サービスを有効に使用するには、OnStart と OnStop の両方をサービス クラスに実装する必要があります。

使用例使用例

ServiceBase から派生したサービス クラスに対して OnStart メソッドを実装する例を次に示します。このコード例は、ServiceBase クラスのトピックで取り上げているコード例の一部分です。

    ' Start the service.
    Protected Overrides Sub
 OnStart(ByVal args() As String)
        Dim handle As IntPtr = Me.ServiceHandle
        myServiceStatus.currentState = Fix(State.SERVICE_START_PENDING)
        SetServiceStatus(handle, myServiceStatus)

        ' Start a separate thread that does the actual work.
        If workerThread Is Nothing
 OrElse (workerThread.ThreadState And System.Threading.ThreadState.Unstarted
 Or System.Threading.ThreadState.Stopped) <> 0 Then
#If LOGEVENTS Then
            System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStart",
 DateTime.Now.ToLongTimeString() + _
                " - Starting the service worker thread.")
#End If

            workerThread = New Thread(New ThreadStart(AddressOf
 ServiceWorkerMethod))
            workerThread.Start()
        End If
        If Not (workerThread Is
 Nothing) Then
#If LOGEVENTS Then
            System.Diagnostics.EventLog.WriteEntry("SimpleService.OnStart",
 DateTime.Now.ToLongTimeString() + _
                " - Worker thread state = " + workerThread.ThreadState.ToString())
#End If
        End If
        myServiceStatus.currentState = Fix(State.SERVICE_RUNNING)
        SetServiceStatus(handle, myServiceStatus)

    End Sub 'OnStart

        // Start the service.
        protected override void OnStart(string[]
 args)
        {
            IntPtr handle = this.ServiceHandle;
            myServiceStatus.currentState = (int)State.SERVICE_START_PENDING;
            SetServiceStatus(handle, myServiceStatus);

            // Start a separate thread that does the actual work.

            if ((workerThread == null) ||
                ((workerThread.ThreadState &
                 (System.Threading.ThreadState.Unstarted | System.Threading.ThreadState.Stopped))
 != 0))
            {
#if LOGEVENTS
                EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString()
 +
                    " - Starting the service worker thread.");
#endif

                workerThread = new Thread(new
 ThreadStart(ServiceWorkerMethod));
                workerThread.Start();
            }
            if (workerThread != null)
            {
#if LOGEVENTS
                EventLog.WriteEntry("SimpleService.OnStart", DateTime.Now.ToLongTimeString()
 +
                    " - Worker thread state = " +
                    workerThread.ThreadState.ToString());
#endif
            }
            myServiceStatus.currentState = (int)State.SERVICE_RUNNING;
            SetServiceStatus(handle, myServiceStatus);

        }
    // Start the service.
protected:
    virtual void OnStart( array<String^>^  ) override
    {
        // Start a separate thread that does the actual work.
        if ( (workerThread == nullptr) || ((workerThread->ThreadState
 & (System::Threading::ThreadState::Unstarted | System::Threading::ThreadState::Stopped))
 != (System::Threading::ThreadState)0) )
        {
            Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Starting
 the service worker thread.", "OnStart" );
            workerThread = gcnew Thread( gcnew ThreadStart( this,&SimpleService::ServiceWorkerMethod
 ) );
            workerThread->Start();
        }

        if ( workerThread != nullptr )
        {
            Trace::WriteLine( DateTime::Now.ToLongTimeString() + " - Worker
 thread state = " + workerThread->ThreadState.ToString(), "OnStart"
 );
        }
    }
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ServiceBase クラス
ServiceBase メンバ
System.ServiceProcess 名前空間
OnContinue
OnPause
OnPowerEvent
OnShutdown
OnStop
OnCustomCommand



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

ServiceBase.OnStart メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ServiceBase.OnStart メソッドのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS