知識マップ: Windowsサービスの作り方と運用 ── タスクスケジューラとの使い分けからBackgroundServiceのサービス化まで
記事「Windowsサービスの作り方と運用 ── タスクスケジューラとの使い分けからBackgroundServiceのサービス化まで」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsサービスはサービス制御マネージャー(SCM)がセッション0で管理する常駐プロセスで、直接UIを出せないためUIが必要な場合はプロセス間通信で別プロセスに分離する。.NETではGeneric Host上に構築されたBackgroundServiceをAddWindowsServiceでSCM対応させ、開始の種類・実行アカウント・回復オプション・停止のタイムアウトをsc.exeでの登録時に設計する。既定のLocalSystemは権限が強すぎるため避け、仮想アカウントかgMSAを選ぶのが実務上の要点となる。BackgroundServiceの未処理例外は既定でホストを正常停止させるためSCMの回復オプションが働かず、再起動させたい失敗は非0の終了コードで明示的に落とす必要がある。
flowchart LR
accTitle: Windowsサービスの作り方と運用の知識マップ
accDescr: WindowsサービスがSCMとセッション0の上でBackgroundServiceとGeneric Hostにより実装され、開始の種類・実行アカウント・回復オプション・停止処理を登録時に設計することを示す図
windows_service["Windowsサービス"]
backgroundservice["BackgroundService"]
generic_host["Generic Host"]
dotnet[".NET(Core以降)"]
add_windows_service["AddWindowsService(UseWindowsService)"]
scm["サービス制御マネージャー(SCM)"]
session_zero["セッション0"]
ipc["プロセス間通信(IPC)"]
named_pipe["名前付きパイプ"]
sc_exe_create["sc.exe create"]
admin_rights["管理者権限"]
service_start_type["開始の種類(スタートアップの種類)"]
service_recovery_options["回復オプション(sc.exe failure)"]
bg_exception_stophost["BackgroundServiceExceptionBehavior.StopHost"]
localsystem_account["LocalSystemアカウント"]
virtual_service_account["仮想アカウント"]
gmsa["gMSA(group Managed Service Account)"]
shutdown_timeout["ShutdownTimeout(HostOptions)"]
eventlog_provider["EventLogロガープロバイダー"]
backgroundservice -->|"利用する"| generic_host
backgroundservice -->|"利用する"| dotnet
add_windows_service -->|"実装を担う"| scm
windows_service -->|"前提とする"| session_zero
windows_service -.->|"前提とする"| ipc
ipc -.->|"利用する"| named_pipe
windows_service -.->|"で構成できる"| sc_exe_create
sc_exe_create -->|"前提とする"| admin_rights
windows_service -->|"で構成できる"| service_start_type
windows_service -->|"で構成できる"| service_recovery_options
bg_exception_stophost -.->|"両立しない"| service_recovery_options
backgroundservice -->|"原因になり得る"| bg_exception_stophost
localsystem_account -->|"用いるのは非推奨"| windows_service
virtual_service_account -->|"推奨される対応"| windows_service
gmsa -->|"推奨される対応"| windows_service
generic_host -->|"で構成できる"| shutdown_timeout
windows_service -.->|"で構成できる"| eventlog_provider
eventlog_provider -->|"前提とする"| admin_rights
generic_host -->|"で構成できる"| add_windows_service
概念間の関係(全19件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- BackgroundServiceはGeneric Hostを利用します。
- BackgroundServiceは.NET(Core以降)を利用します。
- AddWindowsService(UseWindowsService)はサービス制御マネージャー(SCM)の実装を担います。
- Windowsサービスはセッション0を前提とします。
- Windowsサービスはプロセス間通信(IPC)を前提とします。
- プロセス間通信(IPC)は名前付きパイプを利用します。
- Windowsサービスはsc.exe createで構成できます。
- sc.exe createは管理者権限を前提とします。
- Windowsサービスは開始の種類(スタートアップの種類)で構成できます。
- Windowsサービスは回復オプション(sc.exe failure)で構成できます。
- BackgroundServiceExceptionBehavior.StopHostは回復オプション(sc.exe failure)と両立しません。
- BackgroundServiceはBackgroundServiceExceptionBehavior.StopHostの原因になることがあります。
- LocalSystemアカウントをWindowsサービスに用いることは推奨されません。
- 仮想アカウントはWindowsサービスに対する本記事の推奨です。
- gMSA(group Managed Service Account)はWindowsサービスに対する本記事の推奨です。
- Generic HostはShutdownTimeout(HostOptions)で構成できます。
- WindowsサービスはEventLogロガープロバイダーで構成できます。
- EventLogロガープロバイダーは管理者権限を前提とします。
- Generic HostはAddWindowsService(UseWindowsService)で構成できます。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。