@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-service-worker-service-guide/#article>
    schema:about <https://comcomponent.com/knowledge/windows-service/>, <https://comcomponent.com/knowledge/backgroundservice/> ;
    schema:mentions <https://comcomponent.com/knowledge/task-scheduler/>, <https://comcomponent.com/knowledge/dotnet/>, <https://comcomponent.com/knowledge/named-pipe/>, <https://comcomponent.com/knowledge/generic-host/>, <https://comcomponent.com/knowledge/add-windows-service/>, <https://comcomponent.com/knowledge/scm/>, <https://comcomponent.com/knowledge/session-zero/>, <https://comcomponent.com/knowledge/service-start-type/>, <https://comcomponent.com/knowledge/sc-exe-create/>, <https://comcomponent.com/knowledge/service-recovery-options/>, <https://comcomponent.com/knowledge/localsystem-account/>, <https://comcomponent.com/knowledge/virtual-service-account/>, <https://comcomponent.com/knowledge/gmsa/>, <https://comcomponent.com/knowledge/shutdown-timeout/>, <https://comcomponent.com/knowledge/bg-exception-stophost/>, <https://comcomponent.com/knowledge/eventlog-provider/>, <https://comcomponent.com/knowledge/ipc/> .

<https://comcomponent.com/knowledge/windows-service/> a skos:Concept ;
    skos:prefLabel "Windowsサービス"@ja ;
    skos:definition "ユーザーのサインインと無関係にバックグラウンドで動くWindowsのプロセス。"@ja ;
    skos:altLabel "サービス"@ja ;
    ks:requires <https://comcomponent.com/knowledge/session-zero/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/service-start-type/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/service-recovery-options/> .

<https://comcomponent.com/knowledge/backgroundservice/> a skos:Concept ;
    skos:prefLabel "BackgroundService"@ja ;
    skos:definition "IHostedServiceの書きやすい実装補助となる抽象クラスで、長く走る本体をExecuteAsyncに書ける。"@ja ;
    skos:altLabel "BackgroundService クラス"@ja ;
    ks:uses <https://comcomponent.com/knowledge/generic-host/> ;
    ks:uses <https://comcomponent.com/knowledge/dotnet/> ;
    ks:mayCause <https://comcomponent.com/knowledge/bg-exception-stophost/> .

<https://comcomponent.com/knowledge/generic-host/> a skos:Concept ;
    skos:prefLabel "Generic Host"@ja ;
    skos:definition "構成・DI・ロギングをまとめて面倒を見る.NETの土台。Host.CreateApplicationBuilderを使うと既定の構成プロバイダーの階層が組み立てられる。"@ja ;
    skos:altLabel "HostApplicationBuilder" ;
    skos:altLabel "Host.CreateApplicationBuilder" ;
    ks:configuredBy <https://comcomponent.com/knowledge/shutdown-timeout/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/add-windows-service/> .

<https://comcomponent.com/knowledge/dotnet/> a skos:Concept ;
    skos:prefLabel ".NET(Core以降)"@ja ;
    skos:definition ".NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。"@ja ;
    skos:altLabel ".NET Core" ;
    skos:altLabel "モダンな.NET"@ja .

<https://comcomponent.com/knowledge/add-windows-service/> a skos:Concept ;
    skos:prefLabel "AddWindowsService(UseWindowsService)"@ja ;
    skos:definition "Generic Hostのライフタイムを、Windowsサービスとして起動された場合にSCMと会話する実装へ切り替える拡張メソッド。"@ja ;
    skos:altLabel "AddWindowsService" ;
    skos:altLabel "UseWindowsService" ;
    ks:implements <https://comcomponent.com/knowledge/scm/> .

<https://comcomponent.com/knowledge/scm/> a skos:Concept ;
    skos:prefLabel "サービス制御マネージャー(SCM)"@ja ;
    skos:definition "Windowsサービスの登録・開始・停止の要求を仲介し、失敗時の回復動作を実行するWindowsのコンポーネント。"@ja ;
    skos:altLabel "Service Control Manager" ;
    skos:altLabel "SCM" .

<https://comcomponent.com/knowledge/session-zero/> a skos:Concept ;
    skos:prefLabel "セッション0"@ja ;
    skos:definition "Windows Vista以降、サービスなど対話的ユーザーに関わらないプロセス専用に予約された、ユーザーの対話的セッションとは分離されたセッション。"@ja ;
    skos:altLabel "Session 0" .

<https://comcomponent.com/knowledge/ipc/> a skos:Concept ;
    skos:prefLabel "プロセス間通信(IPC)"@ja ;
    skos:definition "別プロセスとデータや合図をやり取りする仕組みの総称。"@ja ;
    skos:altLabel "Inter-Process Communication" .

<https://comcomponent.com/knowledge/named-pipe/> a skos:Concept ;
    skos:prefLabel "名前付きパイプ"@ja ;
    skos:definition "Windowsのプロセス間通信手段のひとつ。リモートからの利用はアプリ自身のポートではなくSMB(TCP 445)を経由する。"@ja .

<https://comcomponent.com/knowledge/sc-exe-create/> a skos:Concept ;
    skos:prefLabel "sc.exe create"@ja ;
    skos:definition "サービスをサービス制御マネージャーへ新規登録するコマンドラインツールのサブコマンド。"@ja ;
    skos:altLabel "sc create" ;
    ks:requires <https://comcomponent.com/knowledge/admin-rights/> .

<https://comcomponent.com/knowledge/admin-rights/> a skos:Concept ;
    skos:prefLabel "管理者権限"@ja ;
    skos:definition "コンピューター全体の設定を変更できる権限。"@ja ;
    skos:altLabel "昇格"@ja .

<https://comcomponent.com/knowledge/service-start-type/> a skos:Concept ;
    skos:prefLabel "開始の種類(スタートアップの種類)"@ja ;
    skos:definition "サービス登録時に指定する、自動・自動(遅延開始)・手動・無効の4種類の起動タイミングの設定。"@ja ;
    skos:altLabel "Start Type" ;
    skos:altLabel "自動/遅延自動/手動/無効"@ja .

<https://comcomponent.com/knowledge/service-recovery-options/> a skos:Concept ;
    skos:prefLabel "回復オプション(sc.exe failure)"@ja ;
    skos:definition "サービスプロセスが異常終了したときの動作(再起動など)をSCMに宣言的に設定する仕組み。"@ja ;
    skos:altLabel "Recovery Options" ;
    skos:altLabel "sc.exe failure" .

<https://comcomponent.com/knowledge/bg-exception-stophost/> a skos:Concept ;
    skos:prefLabel "BackgroundServiceExceptionBehavior.StopHost"@ja ;
    skos:definition ".NET 6以降の既定動作で、BackgroundServiceのExecuteAsyncから漏れた未処理例外をログに記録したうえでホストを正常停止させる設定。"@ja ;
    skos:altLabel "StopHost" ;
    skos:altLabel "既定の例外処理動作"@ja .

<https://comcomponent.com/knowledge/localsystem-account/> a skos:Concept ;
    skos:prefLabel "LocalSystemアカウント"@ja ;
    skos:definition "サービスの実行アカウントの1つ。ローカルでは広範な特権を持つ一方、ネットワーク上ではコンピューターの資格情報としてリモートサーバーに認証される。"@ja ;
    skos:altLabel "LocalSystem" ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/virtual-service-account/> a skos:Concept ;
    skos:prefLabel "仮想アカウント"@ja ;
    skos:definition "パスワード管理が不要で、コンピューターアカウントの資格情報でネットワークにアクセスしながらサービス単位でACLを付与できるサービス実行アカウント。"@ja ;
    skos:altLabel "Virtual Account" ;
    skos:altLabel "NT SERVICE\\サービス名"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/gmsa/> a skos:Concept ;
    skos:prefLabel "gMSA(group Managed Service Account)"@ja ;
    skos:definition "パスワードの自動生成・自動更新とSPN管理の簡素化を提供するActive Directoryドメインのサービスアカウント。ドメインコントローラー側のKDSルートキーの準備を前提とする。"@ja ;
    skos:altLabel "グループ管理サービスアカウント"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/windows-service/> .

<https://comcomponent.com/knowledge/shutdown-timeout/> a skos:Concept ;
    skos:prefLabel "ShutdownTimeout(HostOptions)"@ja ;
    skos:definition "Generic Hostが停止処理の完了を待つ最大時間を指定するオプションで、既定は30秒。"@ja ;
    skos:altLabel "HostOptions.ShutdownTimeout" .

<https://comcomponent.com/knowledge/eventlog-provider/> a skos:Concept ;
    skos:prefLabel "EventLogロガープロバイダー"@ja ;
    skos:definition "Host.CreateApplicationBuilderがWindows上で自動追加する、既定でWarning以上のログをWindowsイベントログへ書き込むロギングプロバイダー。"@ja ;
    skos:altLabel "EventLog Logger Provider" ;
    ks:requires <https://comcomponent.com/knowledge/admin-rights/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/backgroundservice/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/generic-host/> ;
    schema:description "BackgroundServiceは.NET Generic Host上でホストされたサービスとして動作する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/generic-host> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/backgroundservice/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/dotnet/> ;
    schema:description "BackgroundServiceは.NET(Core以降)のクラスライブラリとして提供される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/windows-service> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/add-windows-service/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/scm/> ;
    schema:description "AddWindowsServiceはWindowsサービスとして起動されたときにSCMとの開始・停止のやり取りを代行するライフタイムを組み込む"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/windows-service> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/session-zero/> ;
    schema:description "Windowsサービスはセッション0という隔離されたセッションで実行され、ユーザーと直接対話できない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/services/interactive-services> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/ipc/> ;
    schema:description "UIが必要な場合はサービスとUIアプリをプロセス分離し、プロセス間通信で会話する構成にする"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/services/interactive-services> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ipc/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/named-pipe/> ;
    schema:description "サービスとUIアプリ間のIPCでは、選択肢の一つとして名前付きパイプが案内されている"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/services/interactive-services> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/sc-exe-create/> ;
    schema:description "コマンドラインから登録する場合、Windowsサービスはsc.exe createコマンドでSCMに登録する(PowerShellのNew-ServiceやMSIのServiceInstallなど他の登録経路もある)"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/sc-create> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sc-exe-create/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/admin-rights/> ;
    schema:description "サービスの登録はsc.exe createを管理者のPowerShellで実行する必要がある"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/sc-create> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/service-start-type/> ;
    schema:description "開始の種類(自動・遅延自動・手動・無効)はsc.exe createのstart=で設定する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/sc-create> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/service-recovery-options/> ;
    schema:description "異常終了時の回復動作はsc.exe failureで宣言的に設定する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/windows-service> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bg-exception-stophost/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/service-recovery-options/> ;
    schema:description "StopHostによるホストの停止は正常停止として扱われるため、SCMの回復オプションを設定していても再起動は発動しない。非0の終了コードで明示的に異常終了させた場合は回復オプションが発動する"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/compatibility/core-libraries/6.0/hosting-exception-handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/backgroundservice/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/bg-exception-stophost/> ;
    schema:description ".NET 6以降、BackgroundServiceのExecuteAsyncから漏れた未処理例外は既定でホストを停止させるStopHostの動作を引き起こす"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/compatibility/core-libraries/6.0/hosting-exception-handling> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/localsystem-account/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "sc.exe createの既定であるLocalSystemを惰性で選ぶことは推奨されず、必要な権限だけを持つアカウントを選ぶべきとされる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/administration/windows-commands/sc-create> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/virtual-service-account/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "ローカル資源への最小権限で足りる場合、パスワード管理不要な仮想アカウントが実行アカウントの第一候補になる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/identity/ad-ds/manage/understand-service-accounts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/gmsa/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/windows-service/> ;
    schema:description "ドメインで共有やDBに触るサービスには、パスワードをドメイン側が自動管理するgMSAが本命とされる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-server/identity/ad-ds/manage/understand-service-accounts> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generic-host/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/shutdown-timeout/> ;
    schema:description "停止処理を待つ時間はHostOptions.ShutdownTimeoutで設定でき、既定は30秒"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/microsoft.extensions.hosting.hostoptions.shutdowntimeout> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-service/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/eventlog-provider/> ;
    schema:description ".NET(Host.CreateApplicationBuilderを使う実装)のWindowsサービスでは、既定のログ出力はEventLogロガープロバイダー経由で行われ、既定ではWarning以上のみ記録される"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/microsoft.extensions.logging.eventlog.eventlogsettings.logname> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/eventlog-provider/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/admin-rights/> ;
    schema:description "未登録のイベントソースへの書き込みにはイベントソースの登録が必要で、登録には管理者権限がいる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/api/system.diagnostics.eventlog.createeventsource> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/generic-host/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/add-windows-service/> ;
    schema:description "Worker ServiceのGeneric Hostにパッケージを追加してAddWindowsServiceを呼ぶだけで、Windowsサービスとして起動されたときにSCMと会話するライフタイムへ切り替わる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/core/extensions/windows-service> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .
