# .NET Process Boilerplate

Exploring standardized boilerplate for a variety of process types.

Here's a known list of process types:

- Windows Form running as a short-lived client application
- Long-running Windows Service.
- Long-running Task Tray app.
- Short-lived admin task.
- Camunda worker service.

### General Process Actions

- Startup Debug Hooking
- Hookup Unhandled Exception Handler
- Name the current thread
- Assembly and Dependency Identification
- Load Global App Data (app name, appid, runtimeid, installid, version, etc)
- Memory Logging Setup
- Argument Collection
- OS Verification Check
- Configuration Service
- Locate HCS Instance
- Secrets Service
- Logging Service
- Telemetry Service
- Status Publishing Service

#### Startup Debug Hooks

Top of Program:main, we include an optional debug spin-wait.

This is triggered by a command-line argument to debug the process.

If activated, the process will wait for a debugger to connect, so early startup activities can be diagnosed.

See this page for implementation details: [DotNet Startup Remote Debugging Hook](https://wiki.galaxydump.com/link/61)

#### Secrets Service

- Initial Process Secret - SPIRE-given secret, used to retrieve client token for secrets access.
- Secrets - pulled from central secrets store

#### Configuration Service

#### Logging Service

Manages logging for the process:

- Performs logging setup for the process
- Sets up the NLog instance (or, whichever is used)
- Retrieves any static config of where to store or ship logs.
- Folder Locations - for log files and local configuration


#### Telemetry Service

Publishes action spans and metrics to a central collector.

#### Status Publishing Service

For publishing when a process starts, ends, errors, and periodically while running.

This service is responsible for publishing process metadata, such as:

- App Name
- AppId, RuntimeId, InstallationId
- Exe name
- Exe version and build number
- Start Time
- Machine Host
- Environment
- All dependencies and versions
- Source Repository URL and Rev
- Status: starting, running, shutting down
- Where logs are stored