Manually Starting Siemens WinCC Services After Windows Boot

David Krause13 min read
HMI / SCADASiemensTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

Siemens SIMATIC WinCC V7, WinCC Professional (TIA Portal), and the engineering suites (SIMATIC Manager V5.5, TIA Portal V11/V12/V13) install a large set of Windows services that default to Automatic startup. On a single engineering or runtime station that hosts multiple Siemens products side-by-side, those background services consume RAM, file handles, and CPU even when no engineering session or HMI runtime is active. Common field symptoms include slow Windows logon, locked DLLs, redundant SQL Server instances starting, license-manager handshake failures, and runtime projects that report "server not found" when an operator machine boots faster than the HMI services.

This reference shows how to convert the Siemens service stack from Automatic to Manual and to start the services on demand from a single script, a scheduled task, or a desktop shortcut. The procedure applies to Windows 10 LTSC 2019, Windows 10 21H2, and Windows Server 2016/2019/2022, which are the operating systems listed in the SIMATIC WinCC V7.2 / WinCC V7.5 / TIA Portal V13 SP1 / V14 / V15 / V16 compatibility matrices.

Note: Do not change startup type on a WinCC Runtime station that runs unattended (24/7). Manual startup is intended for engineering workstations and operator stations that are started/stopped by humans. For unattended runtime, leave Automation License Manager and the WinCC services on Automatic (Delayed Start).

Siemens Service Inventory

Before changing anything, inventory the services that ship with the Siemens products installed. The exact list depends on the package and options selected during installation, but the most common service names are listed below.

Service Display Name Internal Name Executable / Module Default Startup
Automation License Manager almsrvx64 C:\Program Files (x86)\Siemens\AutomationLicenseManager\almsrvx64.exe Automatic
S7 DOS Box Service S7DOS C:\Program Files (x86)\Siemens\Automation\S7DOS\S7DOS.exe Manual
SIMATIC WinCC Connectivity Agent CCAgent CCAgent.exe (WinCC bin) Automatic
SIMATIC WinCC Central Color Server CCEServer CCEServer.exe Manual
SIMATIC WinCC Archive Server ArchiveServer ArchiveServer.exe Manual
SIMATIC WinCC Alarm Logging AlarmLogging WinCCAlarmLogSrv.exe Manual
SIMATIC WinCC Tag Logging TagLogging TagLogging.exe Manual
SIMATIC WinCC Runtime WinCC WinCC.exe Manual (Runtime only)
SQL Server (WINCC) MSSQL$WINCC sqlservr.exe Automatic
SQL Server (WINCCPLUS) MSSQL$WINCCPLUS sqlservr.exe Automatic
S7-PCT Service S7PCT S7pctSrv.exe Manual
Proneta Discovery Service PronetaDiscovery PronetaDiscoveryService.exe Automatic (Delayed)
S7 Tracing Service S7TrcSrv S7TrcSrv.exe Manual
TIA Portal Manager Service TiaManager TiaManager.exe Manual
SIMATIC NET Configuration Service SNMPsimaticnet SimaticNET.exe Manual
SIMATIC NET OPC Server OPCsimaticnet simaticnetopc.exe Manual
SIMATIC Logon Service simaticlogonservice simaticlogonservice.exe Manual
Energy Suite Web Service EnergySuiteWebService EnergySuiteWebService.exe Manual

You can enumerate the installed Siemens services on the local machine with the following PowerShell one-liner, which lists every service whose executable lives under C:\Program Files\Siemens or C:\Program Files (x86)\Siemens:

Get-WmiObject Win32_Service | Where-Object { $_.PathName -match 'Siemens' } |
 Select-Object DisplayName, Name, State, StartMode, PathName |
 Sort-Object DisplayName | Format-Table -AutoSize

Save the output before changing anything; you will need it to revert the configuration if required.

Prerequisites

  1. Local Administrator rights. Service startup type and recovery options are stored under HKLM\SYSTEM\CurrentControlSet\Services and require elevation to modify. See Windows Startup Settings for a reference on the underlying boot state machine.
  2. Engineering station with WinCC V7.x, TIA Portal V11 to V16, or SIMATIC Manager V5.5 installed and licensed. Confirm the Automation License Manager is operational: open ALM from the Start menu and verify your license sticks are present. If ALM is stopped, every other Siemens service that depends on a license (CCAgent, S7DOS) will refuse to start.
  3. Current project backup of any WinCC / STEP 7 / TIA Portal projects that live on the station. Service reconfiguration is non-destructive to project files, but you should have a restore point before touching the registry.
  4. For WinCC Runtime stations, the runtime project activation must be moved from AutoStart in Service Mode to Manual start in Service Mode via the WinCC Explorer. The setting lives under Computer → Startup.
  5. Sufficient free RAM headroom. The minimum TIA Portal V13 professional install is 8 GB RAM on an i5-3320M (3.3 GHz) per the TIA Portal V13 SP1 system requirements. If you also host WinCC V7.2, add 4 GB; for TIA Portal V14, V15, and V16 multiply the requirement to 16 GB. Manual startup frees approximately 600 MB to 1.2 GB of working set compared to the default automatic layout.

Step-by-Step Configuration

Step 1 - Disable Automatic Startup in services.msc

Open Control Panel → Administrative Tools → Services, or run services.msc from an elevated command prompt. For each service listed in the table above:

  1. Double-click the service.
  2. On the General tab, change Startup type from Automatic to Manual. Automatic (Delayed Start) is acceptable for ALM and the SQL Server instance if you want them to start after the desktop is responsive but still under automatic control.
  3. Under Service status, click Stop to halt any instance already running.
  4. Click Apply and confirm.
Tip: Use multi-select (Ctrl+Click) on the services list to change them in a single operation. Right-click → Properties opens a property sheet for the first selected service only; instead, use sc.exe from an elevated cmd.exe for batch operations (see Step 3).

Step 2 - Reconfigure WinCC Runtime AutoStart

WinCC V7.x supports three operating modes for the runtime project, set inside the WinCC Explorer:

  • Service Mode + Autostart – the project starts automatically when the WinCC service starts (default). Use this only when the WinCC service itself is Automatic.
  • Service Mode without Autostart – the service runs but waits for an operator to click Activate in the WinCC Explorer or to issue NetStart "MyProject".
  • Normal Mode – the project starts when a Windows user logs on interactively. This is the most common configuration for engineering stations.

For an engineering station, select Service Mode without Autostart and configure the WinCC service as Manual in services.msc. Operators can then start the runtime by opening WinCC Explorer and clicking Activate, or by launching NetStart.exe with the project name as the first argument:

"C:\Program Files (x86)\Siemens\WinCC\bin\NetStart.exe" "HMI_Project_01.mcp"

Step 3 - Use sc.exe for Bulk Changes

From an elevated cmd.exe or PowerShell, use the Windows Service Control Manager (sc.exe) to change startup type in batch. The start= argument has a trailing space that is significant and must be preserved.

sc config "almsrvx64" start= demand
sc config "CCAgent"      start= demand
sc config "CCEServer"    start= demand
sc config "S7DOS"        start= demand
sc config "AlarmLogging" start= demand
sc config "TagLogging"   start= demand
sc config "ArchiveServer" start= demand
sc config "S7PCT"        start= demand
sc config "TiaManager"   start= demand
sc config "simaticlogonservice" start= demand

To re-enable automatic startup for the same set (e.g. before handing the station back to a plant floor):

sc config "almsrvx64" start= auto
sc config "CCAgent"      start= auto
sc config "S7DOS"        start= auto
sc config "MSSQL$WINCC"  start= auto

The start= values are: boot, system, auto, demand (manual), disabled, delayed-auto. See the sc config reference for the full grammar.

Step 4 - Create a Manual Start Script

The most practical interface for an operator or engineer is a single batch or PowerShell file that brings the required services up in dependency order. Save the following as C:\Scripts\Start-WinCC.bat and pin a shortcut to the taskbar or Start menu.

@echo off
:: Elevate to administrator if not already
net session >nul 2>&1 || (powershell -Command "Start-Process cmd -ArgumentList '/c %~f0' -Verb RunAs" & exit /b)

setlocal
set SERVICES=almsrvx64 S7DOS CCAgent CCEServer ArchiveServer AlarmLogging TagLogging WinCC MSSQL$WINCC

echo Bringing up Siemens services...
for %%S in (%SERVICES%) do (
    echo  - %%S
    sc start "%%S" >nul 2>&1
)

:: Start the WinCC project in service mode
if exist "C:\Program Files (x86)\Siemens\WinCC\bin\NetStart.exe" (
    echo Activating WinCC project...
    "C:\Program Files (x86)\Siemens\WinCC\bin\NetStart.exe" "HMI_Project_01.mcp"
)

echo Done.
endlocal

The services must be started in dependency order. almsrvx64 must come first because every other Siemens service performs a license handshake. MSSQL$WINCC must come before ArchiveServer and TagLogging because the archive and tag log services mount databases from the SQL instance. CCAgent depends on almsrvx64. WinCC Runtime (WinCC) depends on AlarmLogging, TagLogging, and CCAgent for tag/connectivity data.

Step 5 - PowerShell Equivalent with Dependency Walk

For a more robust version that resolves service dependencies automatically, use the following PowerShell script. It walks the dependency tree starting from the named service, starts every parent first, and respects the configured service account.

function Start-SiemensService {
    param(
        [Parameter(Mandatory)][string]$Name
    )
    $svc = Get-Service -Name $Name -ErrorAction SilentlyContinue
    if (-not $svc) { Write-Warning "$Name not installed"; return }

    # Recurse on required services
    $deps = Get-WmiObject Win32_Service -Filter "Name='$Name'" |
            ForEach-Object { $_.Dependencies } |
            Where-Object { $_ } |
            ForEach-Object { $_.Substring(4) -replace '\.\w+$','' } |
            Select-Object -Unique
    foreach ($d in $deps) { Start-SiemensService -Name $d }

    if ($svc.Status -ne 'Running') {
        Write-Host "Starting $Name..." -NoNewline
        try {
            Set-Service -Name $Name -Status Running -ErrorAction Stop
            Write-Host " OK" -ForegroundColor Green
        } catch {
            Write-Host " FAILED: $_" -ForegroundColor Red
        }
    }
}

# Bring up the runtime stack
'S7DOS','CCAgent','ArchiveServer','AlarmLogging','TagLogging' |
    ForEach-Object { Start-SiemensService -Name $_ }

The recursive helper avoids the circular-dependency trap that batch scripts hit when CCAgent references both almsrvx64 and a WinCC service, while CCAgent itself is referenced by the WinCC service.

Step 6 - Create a Symmetric Stop Script

Stopping a WinCC runtime cleanly matters more than starting it. The shutdown order is the reverse of the start order: stop the runtime project first, then the WinCC host service, then the archive/connectivity/ALM stack. Save the following as C:\Scripts\Stop-WinCC.bat:

@echo off
net session >nul 2>&1 || (powershell -Command "Start-Process cmd -ArgumentList '/c %~f0' -Verb RunAs" & exit /b)

set SERVICES=WinCC ArchiveServer AlarmLogging TagLogging CCEServer CCAgent S7DOS MSSQL$WINCC almsrvx64

echo Shutting down Siemens services...
for %%S in (%SERVICES%) do (
    echo  - %%S
    sc stop "%%S" >nul 2>&1
)
echo Done.

Allow a 30- to 60-second wait between sc stop MSSQL$WINCC and any further action; the SQL Server instance must complete checkpoint writes before the ALM handshake can be torn down cleanly.

Step 7 - Schedule Optional Delayed Start

If you do not want the operator to remember to run a script, you can configure a scheduled task with a trigger at logon and a delay. The Microsoft clean-boot documentation describes the msconfig and Task Scheduler primitives that this approach uses.

  1. Open Task Scheduler (taskschd.msc).
  2. Click Create Task. On the General tab, name it Start Siemens WinCC Stack and tick Run with highest privileges.
  3. On the Triggers tab, click New…. Set Begin the task to At log on, then tick Delay task for: and set it to 30 seconds.
  4. On the Actions tab, set the action to Start a program: C:\Scripts\Start-WinCC.bat.
  5. On the Conditions tab, untick Start only if on AC power if the station is a laptop.

This gives the operator a fully automatic experience on logon while keeping the underlying services Manual, so a reboot after a crash does not pile every Siemens daemon onto the boot sequence.

Memory and Performance Considerations

On a station with TIA Portal V13 SP1, WinCC V7.2, and SIMATIC Manager V5.5 all installed on the default 8 GB / i5-3320M, the cumulative resident set of the Siemens service stack is roughly:

Service Approx. Working Set Service Approx. Working Set
almsrvx64 40 MB CCAgent 120 MB
S7DOS 25 MB ArchiveServer 90 MB
MSSQL$WINCC 350 MB AlarmLogging 80 MB
TagLogging 70 MB CCEServer 60 MB
S7PCT 45 MB TiaManager 60 MB

Total: ~1.0 GB. Switching to Manual and starting only the services required for the active project recovers the bulk of that footprint. On a 16 GB station (TIA V15/V16 + WinCC V7.5) the savings are less dramatic but the boot/login time still drops by 30-90 seconds because the SQL instance checkpoint and the S7DOS handshake no longer block the desktop.

Verification

  1. Reboot the engineering station. Confirm that almsrvx64, CCAgent, S7DOS, and MSSQL$WINCC show Stopped in services.msc. If any shows Running, you missed a service in Step 1 or Step 3.
  2. Open the start script (or the scheduled task) and confirm that the services transition to Running in dependency order. From an elevated prompt:
    sc query almsrvx64 | findstr STATE
    sc query MSSQL$WINCC | findstr STATE
    sc query WinCC | findstr STATE

    The expected output for each is RUNNING.
  3. Open WinCC Explorer and confirm that the configured project activates without error. Check the Log file at C:\Program Files (x86)\Siemens\WinCC\diagnose\WinCC_SStart_xx.log for handshake messages such as ALM handshake OK and CCAgent: listening on 0.0.0.0:5000.
  4. Connect a STEP 7 / TIA client to the station and run a tag read against the local WinCC tag list. A successful read proves that CCAgent, the SQL instance, and the runtime are all correctly wired.
  5. Run the stop script and confirm the services shut down in reverse order. Watch the Event Viewer under Applications and Services Logs → Siemens Automation for clean shutdown messages.

Troubleshooting Matrix

trigger is too short, or NetStart path is wrong
Symptom Likely Cause Fix
sc start almsrvx64 returns 5 (Access is denied) Command prompt not elevated Re-run from an elevated cmd.exe (Run as administrator)
WinCC Runtime fails with "License not found" after manual start almsrvx64 was not started first, or is not running Confirm sc query almsrvx64 returns RUNNING before launching WinCC or NetStart
Archive server reports SQL connection failed MSSQL$WINCC was started before the SQL service account was ready Wait 30 s after sc start MSSQL$WINCC, then start ArchiveServer
CCAgent starts but HMI client cannot connect on port 5000 Windows Firewall blocks the port; ALM handshake incomplete Open inbound TCP 5000, 5001, 4900, and 4901 in Windows Defender Firewall; restart CCAgent
After reboot, services restart automatically again A trigger in Task Scheduler or a group policy override Check Computer Configuration → Administrative Templates → System → Services for GPO overrides
WinCC project does not activate on operator logon Increase the trigger delay to 60 s; verify the path to NetStart.exe matches the installed WinCC version
Task Scheduler reports 0x1: Incorrect function Script lacks the elevation hop Add the net session re-elevation block from Step 4
Service status flickers between Running and Stopped A monitor/recovery action in services.msc → Recovery is set to Restart the service on first failure Open the service's Recovery tab and set Take no action for the first and second failure

Boot and Recovery Context

The Siemens service stack runs inside the standard Windows Service Control Manager boot sequence. If a service fails to start during boot, the SCM applies the recovery actions configured on the Recovery tab of the service's property sheet; the first 60 seconds are the critical startup window where a failed almsrvx64 cascades into a failed CCAgent and a failed WinCC runtime. The Microsoft Windows Startup Settings reference explains the Safe Mode and boot-logging options that are useful when diagnosing a service that fails to start at all. For WinPE / pre-boot recovery, the Advanced Startup Options menu exposes the registry editor and command prompt required to roll back a misconfigured start= value.

When switching back to fully automatic startup (for example, before returning a station to 24/7 operation), restore the Recovery tab defaults as well. The default for most Siemens services is Take no action on first and second failure, Restart the service on subsequent failures. Leaving a custom recovery action in place is a common source of the "service keeps restarting" loop that engineers see in the field after a partial reconfiguration.

FAQ

Which Siemens service must start first when bringing up a WinCC station manually?

Start the almsrvx64 (Automation License Manager) service first and wait for state Running before starting any other Siemens service. S7DOS, CCAgent, ArchiveServer, AlarmLogging, and TagLogging all perform a license handshake against ALM at startup; if ALM is not running, those services exit with license errors.

Will changing services to Manual break my WinCC runtime that runs 24/7?

Yes - never change a runtime-only station to Manual. Keep almsrvx64, MSSQL$WINCC, the WinCC host service, and the logging services on Automatic (Delayed Start) for unattended runtime. Manual startup is for engineering and operator-attended stations.

How do I revert a single service from Manual back to Automatic?

From an elevated command prompt run sc config "ServiceName" start= auto, then sc start "ServiceName". The trailing space after start= is required. Repeat for each service you want to revert.

Why does CCAgent fail to start with error 1067 (process terminated) on Windows 10 21H2?

This is typically caused by ALM not running, by a missing CCAgent.ini under ...\WinCC\bin, or by an antivirus product blocking the executable. Confirm ALM is running, restore the ini file from backup, and add the WinCC installation directory to the antivirus exclusion list.

How much memory does the Siemens service stack consume on a TIA Portal V13 station?

On a default install with WinCC V7.2, TIA V11/V12/V13, and SIMATIC Manager V5.5, the active service stack is approximately 1.0 GB of working set. Manual startup recovers the bulk of that footprint, which is the primary reason to convert an engineering station to on-demand service start.

Back to blog