> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/resilience-testing/3.0/chaos-testing/infrastructure/windows.md).

# Windows

Windows Chaos Infrastructure runs chaos experiments against Windows VMs. The installer registers a single binary as the `WindowsChaosInfrastructure` service on the target VM, which then polls the Harness control plane for experiments.

This page walks through the in-product create wizard, configurable options, and how to validate or disable the infrastructure.

***

### Before you begin <a href="#before-you-begin" id="before-you-begin"></a>

* **A Windows VM** with administrator privileges (or an account that can run the installer as administrator).
* **A Harness environment** to attach the infrastructure to. Go to [Create an environment](/resilience-testing/chaos-engineering/chaos-experiments/create-experiments.md#create-environment) if you do not have one.
* **Windows fault prerequisites.** Go to [Windows fault prerequisites](/resilience-testing/chaos-engineering/faults/chaos-fault-categories/windows/prerequisites.md) for the per-fault setup (passwords, tools, etc.).

***

### Resource requirements <a href="#resource-requirements" id="resource-requirements"></a>

The Windows Chaos Infrastructure runs as the `WindowsChaosInfrastructure` Windows service. It is idle between experiments and adds fault-specific load only while an experiment is executing.

| Resource              | Idle usage on a 2 vCPU / 4 GB reference VM                                    |
| --------------------- | ----------------------------------------------------------------------------- |
| **CPU**               | \~0.14% average (0–1.5% instantaneous; brief 5s poll spikes)                  |
| **Memory**            | \~15 MB working set (≈ 0.5% of 4 GB)                                          |
| **Disk**              | \~45 MB installed (binary + bundled tools); \~60 MB ceiling with log rotation |
| **Network bandwidth** | Minimal (HTTP poll + heartbeat every 5s; no persistent connections)           |

Reference measurement was taken on an AWS EC2 `t3.medium` instance (**2 vCPU**, **4 GB** memory) running **Windows Server 2025 Datacenter**.

**Minimum recommended host:** Windows Server 2016+ or Windows 10+ (64-bit) with **50 MB free RAM**, **100 MB free disk**, and outbound HTTPS to the Harness control plane. No inbound ports are required.

{% hint style="info" %}
**HOST SIZING**

The agent's idle cost is negligible, so size the host for the workload the agent will inject chaos against, not for the agent itself. Per concurrent fault, the service adds roughly **+0.7 MB RAM** and **+1.5% CPU** on top of idle; faults that target disk or network may load additional bundled tools (`diskspd`) or kernel drivers (`WinDivert`) for the duration of the experiment.
{% endhint %}

***

### Create a Windows infrastructure <a href="#create-a-windows-infrastructure" id="create-a-windows-infrastructure"></a>

In Harness, go to **Resilience Testing → Project Settings → Resilience Testing Infrastructures**, switch to the **Windows** tab, and click **+ New Infrastructure**. The create wizard has three steps.

#### Step 1. Overview <a href="#step-1-overview" id="step-1-overview"></a>

Enter the infrastructure metadata and pick an environment.

| Field           | Required | Notes                                                  |
| --------------- | -------- | ------------------------------------------------------ |
| **Name**        | Yes      | Display name for the infrastructure.                   |
| **Description** | No       | Free-form context.                                     |
| **Tags**        | No       | Searchable labels.                                     |
| **Environment** | Yes      | Pick from the dropdown or click **+ New Environment**. |

![Windows wizard: Overview step](/files/psaxvM8rlNeCgcx6FpSG)

Click **Configure Details** to continue.

#### Step 2. Configure Options <a href="#step-2-configure-options" id="step-2-configure-options"></a>

All options on this step are optional. Defaults work for most setups, expand a section only if you need to change a value.

| Section                 | Field                                   | Default         | Purpose                                                       |
| ----------------------- | --------------------------------------- | --------------- | ------------------------------------------------------------- |
| **Setup**               | Admin user                              | `Administrator` | Administrator used to install and manage the infrastructure.  |
| **Interval**            | Task poll interval                      | `5s`            | Interval between poll queries for a new experiment.           |
| **Interval**            | Task update interval                    | `5s`            | Interval between status updates for an active fault.          |
| **Interval**            | Infrastructure liveness update interval | `5s`            | Heartbeat interval to the control plane.                      |
| **Retry**               | Update retries (count)                  | `5`             | Maximum retries before the service treats the call as failed. |
| **Retry**               | Update retries interval                 | `5s`            | Wait between status or result retries.                        |
| **Logs**                | Log file max size                       | `5 MB`          | Log file size threshold for rotation.                         |
| **Logs**                | Log file max backups                    | `2`             | Number of rotated log archives to retain.                     |
| **Logs**                | Experiment log file max age             | `30 days`       | Age after which experiment log files are deleted.             |
| **HTTP Proxy**          | HTTP Proxy                              | unset           | Proxy URL used to communicate with the control plane.         |
| **HTTP Client Timeout** | HTTP Client Timeout                     | `30s`           | Timeout for HTTP calls to the control plane.                  |

![Windows wizard: Configure Options step](/files/Fk1s6XSgTXuAYGzvqObn)

For restricted networks, set **HTTP Proxy** to the proxy URL the VM should use for outbound calls to the Harness control plane.

Click **Next** to continue.

#### Step 3. Deploy the setup <a href="#step-3-deploy-the-setup" id="step-3-deploy-the-setup"></a>

Harness generates a PowerShell command that downloads the installer, registers `WindowsChaosInfrastructure` as a service, and connects it to your account.

![Windows wizard: Deploy the setup step](/files/EEBf5z6rov0fab54iWKU)

1. Copy the PowerShell command shown on screen.
2. Open **PowerShell as Administrator** on the target Windows VM.
3. Paste and run the command.
4. Click **Done** in the wizard.

{% hint style="info" %}
**ONE-TIME ACCESS KEY**

The access key embedded in the command is single use. If you close the wizard before running the command, reopen the deploy step to generate a new one.
{% endhint %}

The installer prints output similar to:

```
    Directory: C:\

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          3/7/2024   7:48 AM                HCE
Downloading windows-chaos-infrastructure binary...
Config file created at C:\HCE\config.yaml

    Directory: C:\HCE\Logs

[SC] CreateService SUCCESS
Service created and started successfully.
```

The default install paths are:

* **Binary:** `C:\HCE\windows-chaos-infrastructure.exe`
* **Config:** `C:\HCE\config.yaml`
* **Logs:** `C:\HCE\logs\`

***

### Validate the installation <a href="#validate-the-installation" id="validate-the-installation"></a>

After running the install command, Harness takes a few moments to register the infrastructure. Go to **Resilience Testing → Project Settings → Resilience Testing Infrastructures → Windows** and confirm the status is `CONNECTED`.

To verify the service on the VM:

1. Open **Task Manager** and switch to **More details**.
2. Find **WindowsChaosInfrastructure** under the **Services** tab. The state should be **Running**.
3. If the state is **Stopped**, right-click the service and select **Start**.

#### Logs <a href="#logs" id="logs"></a>

Logs are written under the log directory (default `C:\HCE\logs`).

* **Infrastructure logs** capture connectivity, startup, and polling errors. Files are rotated when they reach **Log file max size** (default 5 MB); the most recent **Log file max backups** archives (default 2) are kept.
* **Experiment logs** are written one file per fault, named after the fault's unique name. Each experiment run also creates its own folder with the connectivity logs for that run. Files are deleted after **Experiment log file max age** (default 30 days).

***

### Disable the infrastructure <a href="#disable-the-infrastructure" id="disable-the-infrastructure"></a>

1. Go to **Resilience Testing → Project Settings → Resilience Testing Infrastructures → Windows**.
2. Click the **⋮** menu next to the infrastructure and select **Disable**.
3. Copy the uninstall command, run it in **PowerShell as Administrator** on the VM, and click **Confirm**.

***

### Next steps <a href="#next-steps" id="next-steps"></a>

* [Upgrade Windows infrastructure](/resilience-testing/chaos-testing/infrastructure/windows/upgrade.md): apply the latest binary to an existing install.
* [Windows fault prerequisites](/resilience-testing/chaos-engineering/faults/chaos-fault-categories/windows/prerequisites.md): per-fault setup before running experiments.
* [Overview](/resilience-testing/chaos-testing/infrastructure.md): compare against the Kubernetes and Linux infrastructure types.
