Setting up a windows service

Coverage Collector Service Installation

As an Administrator, install and start the coverage collector service:

SL.DotNet.CoverageCollectorService.exe install --start

Register our agent as a profiler in the services registry settings:

SL.DotNet.exe instrumentService --serviceName {YourService} --force

Restart your service manually via the Service Manager console or the following PowerShell command

Restart-Service -Name {YourService} -Force

Capturing coverage

During the time you want to run your tests and capture coverage, you can now start and stop the coverage collection of the SeaLights agent test listener

Starting coverage collection session

Before you start running your tests, you need to update the SeaLights test listener to start collecting coverage. You do so with the startCollectorServiceSession parameter.

SL.DotNet.exe startCollectorServiceSession --buildSessionIdFile buildSessionId.txt --labId my_labId --processName YourProcess.exe --includeChildProcesses true
  • Note that this can be run on a remote machine (like the CI running the tests) while providing the host to start the session on using the parameter: --machine <host>

  • If you’re running several services on the machine, you can use the above command with --processName * and every service having the Sealights' environment variables defined in its Registry entry will be metered

See 'SeaLights .NET Core agent - Command Reference' for full parameter details

Troubleshooting misconfiguration

If the Profiler doesn't start correctly, you can validate your configuration using the following approaches:

  1. Open the Event Viewer and search for possible errors under Local> Windows Log > Application

  2. Validate the correct variables were attached to the process of your service using a tool like Process Explorer - Sysinternals. You can refer to our dedicated article .NET - Deep Troubleshooting using Process Explorer for detailed instructions on how to use it with Sealights.

  3. You can enable advanced logs at the Profiler level according to the following instructions: .NET - Collecting Profiler Logs | Collecting Profiler logs from Windows Services

Running your tests

Now you can run any one of your tests that runs against this service and capture coverage.

See 'SeaLights .NET Core agent - Running tests' for details of how to run tests

Stopping coverage collection session

SL.DotNet.exe stopCollectorServiceSession --buildSessionIdFile buildSessionId.txt --processName YourProcess.exe

Uninstalling Profiler from your Service

If needed, you can un-register the SeaLights profiler from your Service

SL.DotNet.exe instrumentService --serviceName {YourService} --force --undo

Sample script

# ===== SECTION TO UPDATE ====
$SL_TOKEN="123456789" #Prefer an Env variable from your Credentials Manager
# Env specific 
$SL_BSID_FILE="$SEALIGHTS_PATH\buildSessionId.txt"
$SL_ENV_LABID="TestLabEnv@Automation"
#App specific
$SL_ServiceName="YourService" 
$SL_ProcessName="YourService.exe" 
# ============================

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$previousProgressPref=$global:ProgressPreference && $global:ProgressPreference = "SilentlyContinue" #Disable Progress bar topowershell  speed up download and expand

### Install Agent and Token ###
iwr -OutFile sealights-dotnet-agent.zip -UseBasicParsing -Uri https://agents.sealights.co/dotnetcore/latest/sealights-dotnet-agent-windows-self-contained.zip
Expand-Archive .\sealights-dotnet-agent.zip -DestinationPath sl-dotnet-agent -Force
Write-Output "[Sealights] .NetCore Agent version is: $(Get-Content .\sl-dotnet-agent\version.txt)"
$global:ProgressPreference = $previousProgressPref #Restore progress bar
Out-File -Input-Object $SL_TOKEN -NoNewline -Force ".\sl-dotnet-agent\sltoken.txt"

### Install SL Collector Service ###
Invoke-Expression .\sl-dotnet-agent\SL.DotNet.CoverageCollectorService.exe install start
Invoke-Expression .\sl-dotnet-agent\SL.DotNet.exe instrumentService --serviceName $SL_ServiceName --force
Restart-Service -Name $SL_ServiceName -Force

### Stop all session for specific Service version if they exist ###
SL.DotNet.exe stopCollectorServiceSession --buildSessionIdFile $SL_BSID_FILE --processName $SL_ProcessName

### Starting session for specific Service version ###
Invoke-Expression .\sl-dotnet-agent\SL.DotNet.exe startCollectorServiceSession --buildSessionIdFile $SL_BSID_FILE --processName $SL_ProcessName --labId $SL_ENV_LABID `
                    --includeChildProcesses true --logEnabled true --logAppendConsole true  

#### You can start your tests ####

Last updated

Was this helpful?