The Big Picture: You Cannot Paint a Wall Before It Is Built
A painter cannot start until the builder has finished the wall. The builder needs the electrician to have run the cables first. Each job depends on an earlier one.
Services are the same. A service that sends data over the network cannot work until the networking helper is running. If the SCM started them in the wrong order, the first one would fail. So each service can list the services it needs. These are its dependencies.
4.1 Dependency Chains
What it is: A dependency means: "service A needs service B to be running first". If B needs C, and C needs D, you get a chain.
Where it is written. In the registry value DependOnService inside the service's key (Section 2.2). It is a list of service names. There is also DependOnGroup for groups of services (older style, used mostly by drivers).
See it in services.msc. Double-click a service and open the Dependencies tab. It has two boxes:
| Box | Question it answers |
|---|---|
| This service depends on the following system components | What must be running before this one? |
| The following system components depend on this service | Who will break if this one stops? |
See it in the command line:
sc qc Spooler
Look at the DEPENDENCIES line. For PowerShell:
(Get-Service Spooler).ServicesDependedOn
(Get-Service Spooler).DependentServicesThe first shows what it needs; the second shows who needs it.
A sample chain (names vary by Windows version, so check your own PC):
Print Spooler
│ needs
▼
Remote Procedure Call (RPC) ◄── a very basic service most others need
│ needs
▼
DCOM Server Process Launcher, RPC Endpoint Mapper
RPC stands for Remote Procedure Call. It is a way for programs and services to ask each other to do work, even across the network. Because so much uses it,
RpcSsis one of the most depended-on services. It cannot be stopped safely.
Two kinds of arrows:
| Kind | Meaning |
|---|---|
| Direct dependency | A lists B in its own DependOnService |
| Indirect dependency | A needs B, B needs C, so A really needs C too |
The SCM follows the whole chain, direct and indirect.
4.2 Start Order Resolution
What it is: When the SCM starts services, it must work out a safe order. This is called resolving the dependencies.
How it behaves:
- The SCM looks at which services must start (Automatic ones at boot, or the one you asked for).
- For each, it first checks its dependencies. If one is not running, the SCM starts that first, even if it is Manual.
- It waits until the dependency is running (reports its status, Section 9) and only then starts the dependent service.
- It repeats this down the chain until the first service has nothing it needs.
You ask: start A A needs B, B needs C
step 1 SCM sees A needs B → look at B
step 2 SCM sees B needs C → look at C
step 3 start C (C has no needs)
step 4 C is RUNNING → start B
step 5 B is RUNNING → start A
Services without dependencies can start together. The SCM can start unrelated services at the same time to save boot time. Order is only forced where one needs the other.
Things to know:
| Fact | Why it matters |
|---|---|
| A Manual dependency is started automatically when needed | So Manual does not mean "never" |
| A Disabled dependency cannot be started | The dependent service then fails (error 1068, Section 8) |
| Stopping a service also stops those that depend on it | Windows asks first in services.msc: "The following services will also stop" |
| Circular dependencies (A needs B, B needs A) are not allowed | They could never start |
| Delayed start only delays the start request; dependencies still start first | The chain still works |
Real-world analogy: a to-do list where each task shows "do this first". The manager works from the bottom of the list upwards.
Try this (read-only):
Get-Service | Where-Object { $_.ServicesDependedOn.Count -gt 0 } | Select-Object -First 8 Name, @{n='Needs';e={($_.ServicesDependedOn.Name) -join ', '}}4.3 Failure Propagation
What it is: When one service fails, the failure spreads to the services that depend on it. This is called failure propagation.
What happens at start time. If B cannot start, then A (which needs B) cannot start either. The SCM stops trying and reports an error:
| Message / code | Meaning |
|---|---|
| Error 1068 | "The dependency service or group failed to start." |
| Event ID 7001 | A service depends on another service and that one failed to start |
| Event ID 7003 | A service depends on a service that does not exist (or is marked for deletion) |
What happens while running. If B stops (it crashes, or someone stops it), Windows must also stop A, because A would no longer work. So stopping B stops all its dependents. (Starting B again does not always restart A. That depends on A's own recovery settings, Section 7.)
Normal B crashes
C ─► B ─► A all RUNNING C ─► B(X) ─► A
│ │
▼ ▼
B stopped A stops too
Why this causes confusing problems. You may see the error message about A, but the real fault is in B or C much further down the chain. Always follow the chain down to the root:
- Note the service that failed.
- Open its Dependencies tab (or
sc qc). - Check each dependency's state.
- Start with the deepest one that is not running, and find out why (Section 8).
Good habits:
- Before stopping a service, check who depends on it.
- Never set a service to Disabled without checking its dependents.
- When one service will not start, look at its dependencies first.
Windows tip: In
services.msc, a service whose dependency is disabled will show an error dialog such as "The dependency service or group failed to start" when you click Start. That message is the 1068 error.
Summary
| Concept | Meaning |
|---|---|
| Dependency | "I need that service running first" |
| Stored in | DependOnService (and DependOnGroup) in the service key |
| Where to see | Dependencies tab, sc qc, (Get-Service x).ServicesDependedOn |
| Start order | SCM starts dependencies first, even Manual ones; unrelated ones in parallel |
| Disabled dependency | Cannot start, so the dependent fails (1068) |
| Failure propagation | A failed or stopped service takes down its dependents |
| Debug rule | Follow the chain to the root cause |