How Intune deploys Windows applications
Overview
Deploying a Windows app with Intune looks like a single button click in the admin center, but underneath it is a staged pipeline: you upload a package with deployment metadata, you assign it to users or devices, the device checks in for policy, and a client-side agent does the actual download, evaluation, installation, and reporting. Understanding where each step happens makes the difference between confidently rolling out software and staring at a stuck “Pending” status.
This article walks the full flow for Windows apps end to end, with a focus on Win32 (.intunewin) deployments since they are the most common and most configurable. You will learn what the upload stage stores, how assignments control targeting, what the Intune Management Extension does on the device, how often devices check in, and the order in which requirements, detection, and the install command are evaluated.
What are the stages of an Intune Windows app deployment?
Every Windows app deployment moves through four logical stages. The first two happen in the Intune service (the admin center and Microsoft’s back end); the last two happen on the managed device itself. Keeping this division clear is the fastest way to reason about where a deployment is stuck.
Note the direction of travel: Intune never “pushes” an install in real time. The device asks Intune for new policy on a schedule, then the on-device agent carries out the work. That pull model is why a manual sync exists and why deployments are never instant.
What happens when you upload a Win32 app to Intune?
Win32 apps are not uploaded as raw installers. You first wrap the installer and its supporting files into a single encrypted .intunewin package using the Microsoft Win32 Content Prep Tool (IntuneWinAppUtil.exe). The tool is open source and takes a source folder, a setup file, and an output folder:
IntuneWinAppUtil.exe -c <SourceFolder> -s <SetupFile> -o <OutputFolder>When you add that file to Intune, you are not just uploading bytes. You attach the deployment metadata that the device will later act on: the install and uninstall command lines, the install behavior (System or User context), requirement rules, detection rules, return-code mappings, and restart behavior. The package itself is capped at 8 GB for a single Win32 app. All of this configuration lives in the Intune service and travels to the device as policy, separate from the encrypted content blob that the client downloads at install time.
How do assignments decide who gets the app?
An uploaded app does nothing until you assign it. An assignment binds the app to an Azure AD group of users or devices and declares an intent. There are three intents, and choosing correctly is the most common place admins go wrong.
- Required — the app installs automatically on every targeted user or device with no user action. This is what most managed software uses.
- Available for enrolled devices — the app appears in Company Portal for the user to install on demand. Because it surfaces to a person, it must target a user group; it is not supported for device-only targeting.
- Uninstall — Intune removes the app from targeted users or devices.
The difference between the first two is worth its own discussion; see Required vs Available app assignments for the trade-offs. A sound rollout starts with a small Required or Available pilot group, confirms the install succeeds and reports correctly, then widens the assignment to production groups.
What does the Intune Management Extension do on the device?
On Windows, Win32 apps and PowerShell scripts are not handled by the built-in MDM stack. They are processed by the Intune Management Extension (IME), which runs as the “Microsoft Intune Management Extension” service. IME is installed automatically the first time a device is targeted with a Win32 app or a PowerShell script, so you do not deploy it yourself.
When new app policy arrives, IME downloads the encrypted content, decrypts it, evaluates the rules in order, runs the install command in the configured context, interprets the return code, and reports status back to Intune. Everything it does is logged. When troubleshooting, read these files with CMTrace:
C:\ProgramData\Microsoft\IntuneManagementExtension\LogsThe key files are IntuneManagementExtension.log (overall agent activity), AppWorkload.log (per-app install detail), AgentExecutor.log (PowerShell execution), and ClientHealth.log. AppWorkload.log is usually where you start when a specific app fails.
How often do devices check in for new app policy?
Two separate clocks matter here, and conflating them causes a lot of confusion about why an app “isn’t installing yet”. The general MDM device check-in for Windows runs on a variable schedule, commonly around every 8 hours and more frequently right after enrollment. IME, however, has its own cycle for Win32 apps and PowerShell scripts: it checks for new policy roughly every hour, and also after a device restart or when the service restarts.
| Trigger | Approximate timing | What it covers |
|---|---|---|
| MDM device check-in | ~8 hours (variable) | General configuration and compliance policy |
| IME Win32 / script cycle | ~1 hour | Win32 apps and PowerShell scripts |
| Device restart / service restart | On event | Forces IME to re-evaluate |
| Manual sync | Immediate | Forces a check-in for testing |
When you are testing a deployment you should not wait for the timer. Force a check-in from Settings > Accounts > Access work or school > Info > Sync, or from Company Portal. For more on timing and how to speed up test loops, see how Intune device sync works.
In what order does IME evaluate requirements, detection, and install?
The on-device processing is not arbitrary; it follows a fixed sequence, and each gate can stop the deployment before the next one runs.
- Requirement rules are evaluated first. These include OS architecture (x86/x64/ARM64) and minimum operating system, plus optional checks for disk space, physical memory, logical processors, CPU speed, and custom file, registry, or script requirements. If a device does not meet requirements, the app is reported “Not applicable” and nothing else runs.
- Detection rules run next to decide whether the app is already present. Detection can use MSI product code, a file, a registry value, or a custom PowerShell script. A detection script reports “detected” when it exits 0 and writes output to STDOUT. If the app is already detected, IME skips the install.
- The install command runs only if requirements pass and the app is not yet detected. It executes in System context (the local SYSTEM account, device-wide, the common default) or User context (the signed-in user, who must be present). After install, detection runs again to confirm success.
Because detection is what ultimately determines “Installed”, a wrong detection rule is the classic reason an app installs but reports as failed, or reinstalls on every cycle. See Intune detection rules for how to build reliable ones, and System vs User context for choosing the right install account.
How does Intune interpret install results?
When the install command finishes, IME reads its exit code and maps it to an outcome. Intune ships with default mappings, and you can add custom return codes on the Program tab. The defaults are:
| Return code | Default meaning |
|---|---|
| 0 | Success |
| 1707 | Success |
| 3010 | Soft reboot (success, reboot required) |
| 1641 | Hard reboot (initiated by installer) |
| 1618 | Retry |
Any code not listed defaults to Failed unless you map it. Restart behavior is controlled separately on the Program tab, with options of “No specific action”, “App install may force a device restart”, “Determine behavior based on return codes”, and “Intune will force a mandatory device restart”. For the full picture of how exit codes and reboots interact, see return codes and install behavior.
What does the user see during deployment?
For Required apps, installation happens in the background and may surface a brief toast notification; the user generally does nothing. For Available apps, the user opens Company Portal, finds the app, clicks install, and watches the status update there. Company Portal is also where users and admins confirm install state, which makes it a useful sanity check that policy actually reached the device and the install reported back.
Quick checklist
- Confirm the app is assigned to the correct user or device group with the right intent (Required, Available, or Uninstall).
- Remember Available intent needs a user group; it is not supported for device-only targeting.
- Force a sync from Settings or Company Portal instead of waiting for the ~1h IME cycle when testing.
- Read AppWorkload.log in C:\ProgramData\Microsoft\IntuneManagementExtension\Logs with CMTrace when an install fails.
- Verify detection rules actually match the installed state so the app reports correctly and does not reinstall.
- Map any non-default installer exit codes so a successful install is not reported as Failed.
Leave a feedback
Include versions, steps, and any error text if you have them.

ktktmnuidiutmjjdupzwwhrwprtgtr
devyoogjviqxfvmiosnyefiqfuomuk