Skip to main content

winapp-sandbox

Run, debug, and UI-automate a Windows app in a persistent Windows Sandbox rather than the user's desktop. Use for disposable app testing, guest diagnostics, file transfer, and app or whole-desktop evidence. Builds remain on the host; connection and reconnect can briefly take focus.

Quellinformationen

Repository
microsoft/winappCli
Letzte Quellaktivität
12. Oktober 2026 um 22:53
Erkannte Sprache von SKILL.md
Englisch
Sterne
1.314
Forks
88

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
winapp-sandbox
description
Run, debug, and UI-automate a Windows app in a persistent Windows Sandbox rather than the user's desktop. Use for disposable app testing, guest diagnostics, file transfer, and app or whole-desktop evidence. Builds remain on the host; connection and reconnect can briefly take focus.
**If you can't run `winapp` yourself** (no shell, or the command is denied), give the user the exact `winapp` command(s) for their project instead of only describing the steps. ## Before acting - Confirm the user wants Sandbox execution. Do not drop `--on sandbox` to bypass an error. - Builds, project evaluation, and restore still run on the host. Do not build untrusted projects on the assumption that Sandbox isolates them. - Windows supports one Sandbox; all apps inside it share a user, desktop, and state. Do not treat separate workflows as mutually isolated. - Windows 11 24H2+ on a supported edition and hardware virtualization are required. Guest winapp supports x64/Arm64; x86 apps need guest support and matching dependencies. - winapp only checks host prerequisites: it does not enable features, install the client, request elevation, or reboot. `--on sandbox` selects the target, not setup consent. - On `sandbox_setup_required`, explain the required Windows feature and restart. Decide whether to offer agent-assisted setup or give the user manual steps; obtain explicit approval before running the suggested command in an elevated terminal. Use `/NoRestart` and let the user choose when to reboot: `dism.exe /Online /Enable-Feature /FeatureName:Containers-DisposableClientVM /All /NoRestart`. - On `sandbox_setup_requires_restart`, ask the user to save work and restart when ready. Never restart automatically or treat setup approval as reboot approval. - On `sandbox_setup_incomplete`, direct the user to open Windows Sandbox from Start and finish its client setup/update. Do not repeatedly retry an unchanged prerequisite. - Connection or reconnect may briefly take focus; do not promise zero desktop interruption. - Existing Sandbox instances are reused and changed, not discarded. Never close one or run `wsb stop` without user consent. Closing the window of a Sandbox winapp started asks for confirmation, then ends it and discards its state; the next command starts a fresh one. A Sandbox started with `wsb start` keeps running when its window is closed. ## Launch, inspect, act, verify ```powershell winapp run . --on sandbox --detach winapp ui list-windows --on sandbox winapp ui inspect --on sandbox -a MyApp winapp ui invoke --on sandbox SubmitButton -a MyApp winapp ui screenshot --on sandbox -a MyApp -o .\result.png ``` 1. Use `--detach` when subsequent commands must inspect the running app; without it, `run` waits for exit. Use `--json` when consuming the launch result programmatically. 2. Replace `MyApp` with the discovered name or copy the returned `UiTargetArgs`. Keep `--on sandbox` on every guest UI command, including commands using a PID/HWND. 3. Inspect before acting and verify the result. Use `winapp-ui-automation` for selectors and input methods. Real input and recording need a connected, nonminimized client; read-only inspection can still work when input cannot. 4. Rebuild by rerunning the same command. Add `--clean` only when clearing that app's data is intended. `--debug-output` is supported only for packaged Sandbox apps. 5. Rediscover targets after the Sandbox is recreated. A detached unpackaged app can also end during guest-agent repair; rerun it if it disappears. For parallel packaged worktrees, opt into `winapp run . --unique-identity --on sandbox --detach --json`. Use the returned `UiTargetArgs`. All copies share one Sandbox. See [unique identity for parallel checkouts](https://github.com/microsoft/WinAppCli/blob/main/docs/usage.md#unique-identity-for-parallel-checkouts). ## Coordinate a recording with actions Choose one explicit workflow ID and inject the **same value into every cooperating invocation**, including fresh tool-call shells. Different workflows need different IDs. Recording invocation: ```powershell $env:WINAPP_UI_WORKFLOW_ID = 'myapp-checkout-01' winapp ui record --on sandbox -a MyApp --duration-sec 20 --frames -o .\checkout.mp4 ``` While it records, in another invocation: ```powershell $env:WINAPP_UI_WORKFLOW_ID = 'myapp-checkout-01' winapp ui invoke --on sandbox SubmitButton -a MyApp ``` After both recording and actions finish: ```powershell $env:WINAPP_UI_WORKFLOW_ID = 'myapp-checkout-01' winapp ui yield --on sandbox ``` The forwarded identity is hashed and scoped to this Sandbox generation. Without an ID, each command is a one-shot that releases immediately; a no-ID recording blocks other desktop-changing workflows for its duration. An explicit ID keeps a four-second idle grace. Yield at the end instead of making another workflow wait. After a reasoning gap, inspect again and reopen transient UI before acting. ## Choose evidence by scope ```powershell winapp target snapshot sandbox winapp target screenshot sandbox -o .\sandbox.png winapp target record sandbox --duration-sec 20 --frames -o .\sandbox.mp4 ``` - Start with `target snapshot` when an app never appeared or a command failed. It does not create a VM, reconnect the client, or repair an agent. Its host checks show missing Sandbox prerequisites and their fixes; report those to the user instead of enabling features, elevating, or restarting Windows yourself. For error windows or ambiguous readiness, follow the [desktop readiness guidance](https://github.com/microsoft/winappCli/blob/main/docs/sandbox-execution.md#automating-the-ui); do not close windows or reconnect automatically to make a snapshot succeed. - `target screenshot`/`target record` capture the native guest desktop, not the host client window. `ui screenshot`/`ui record --on sandbox` capture an app window. - Outputs, including default filenames when `-o` is omitted, are delivered to the host. `--frames` returns a frame directory alongside the MP4 after recording finishes. - Use the PNG's native coordinates plus its reported screen origin for guest input. For scaled recording frames, use `coordinates.sourceBounds` and `coordinates.contentRect` from the JSON/manifest, not raw image coordinates. The mapping is documented in [Sandbox capture](https://github.com/microsoft/winappCli/blob/main/docs/sandbox-execution.md#screenshots-and-recordings). `display_changed` means capture stopped before the desktop bounds changed its mapping. - Prefer a positive `--duration-sec` for unattended CLI recording. npm helpers require `durationSec` (integer 1–86400); abort signals cancel forcefully, not gracefully. - Choose a fresh output path. Request `--overwrite` only when replacement is intended: it replaces the MP4 after the new take finishes and archives any previous frame directory. Do not delete partial evidence to make a retry pass. - Read `stopReason`, preserved paths, and `recoveryHint` before reporting success. A `capture_unavailable` stop can leave useful evidence but is not a full take. Ctrl+C can finalize with `stopReason: cancelled` and a successful exit. - If delivery fails, keep the Sandbox running and follow the error's recovery action. Preserve both the received host files and guest originals until recovery finishes. - Treat frames, screenshots, and video as potentially sensitive. ## Guest setup and file transfer ```powershell $copy = winapp target push sandbox .\setup.ps1 Setup\setup.ps1 --json | ConvertFrom-Json winapp target exec sandbox --cwd (Split-Path -Parent $copy.targetPath) -- powershell -ExecutionPolicy Bypass -File .\setup.ps1 winapp target pull sandbox Results .\results ``` Use `target exec` only for necessary setup or diagnostics, not instead of `winapp run`. It streams the command's output and is not a full terminal. The example's execution-policy override is scoped to that PowerShell process; run only a trusted script. Push/pull target paths are **relative to the target's managed work area**; absolute, rooted, and UNC paths are rejected. A single-file destination includes the filename. Use the reported resolved guest path to choose `--cwd` (its parent directory for a single file). See [the transfer guide](https://github.com/microsoft/WinAppCli/blob/main/docs/sandbox-execution.md#running-commands-and-copying-files) for path reporting and missing-root errors. Directory copies skip linked entries; directly named linked sources and paths through destination links are rejected. Deployment rejects links. ## Cleanup and recovery ```powershell winapp unregister . --on sandbox ``` Pass the project or folder you passed to `run` (with or without `--unique-identity`), or its manifest; a `.cs` input isn't supported here. This does not stop the Sandbox. Never use `--force` to bypass target ownership. Follow the error's `userAction`, not just its exit number: infrastructure failures and an application's own exit can both be `70`. Human setup progress goes to stderr and is suppressed with `--quiet`/`--json`. - Prerequisite errors: follow the setup guidance above; keep elevation and restart under user control. - Input unavailable: restore the existing client or use the error's reconnect command. - "Only one running instance of Windows Sandbox is allowed" from the Start menu: a Sandbox is already running. Point the user to **Windows Sandbox** in the taskbar; if it has no window, `wsb list` then `wsb connect --id <id>`. Never stop it without consent. - Incompatible CLI: follow the error; upgrade the installed CLI through its install method, **not `winapp update`**. Obtain consent before stopping a Sandbox (`wsb stop --id <id>`) for a version change; it works however the Sandbox was started. - Missing/unsupported runtime: use the named requirement and configuration in the error. Do not assume any newer same-major runtime is compatible or substitute architectures. - Folder share refused (`sandbox_transport_failed`, `0x80070005`): Sandbox shares as SYSTEM. Grant it access to the reported folder with the error's `icacls` command, then retry. - Incomplete deployment/transfer: retry. Busy: wait. Partial recording: keep reported evidence. - Package conflict: do not remove external or inbox packages to force registration. See [Windows Sandbox execution](https://github.com/microsoft/WinAppCli/blob/main/docs/sandbox-execution.md) for prerequisites, runtime support, lifecycle, output recovery, and known limitations.
Auf GitHub ansehen