During a recent discussion with a customer, we encountered an issue that initially appeared to be a standard application packaging failure. The application was deployed successfully, but users were unable to launch it. Further investigation showed that the package itself was not defective; the issue stemmed from a mismatch between the application’s design and the deployment context.
This scenario is not uncommon and reflects a broader pattern that many packaging and endpoint teams encounter when managing application readiness at scale.
Enterprise deployment tools such as Microsoft Intune and Configuration Manager frequently install applications in the SYSTEM context. This approach works well for traditional, machine‑wide applications but is incompatible with software designed for per‑user installation.
Consider an EXE‑based application such as Postman:
During installation, %LOCALAPPDATA% resolves to:
| 1 C:\Windows\System32\config\systemprofile\AppData\Local |
As a result:
Application files are installed under the SYSTEM profile
The deployment may appear successful, but the application is effectively unusable.
Many modern applications are intentionally built for per‑user installation. Electron‑based applications are a common example. These applications typically:
Common examples include:
This behavior is by design, not a packaging defect.
Repackaging an EXE into an MSI does not change the application's fundamental design. App Readiness generates well‑constructed packages to correctly use environment variables and avoid hard‑coded paths.
The failure occurs at installation time, not during packaging:
The result is broken shortcuts, missing files, and failed launches—despite technically correct packaging.
Let’s break the problem down further.
|
Context |
%LOCALAPPDATA% resolves to |
|
User |
C:\Users\<user>\AppData\Local |
|
SYSTEM |
C:\Windows\System32\config\systemprofile\AppData\Local |
Shortcuts created during SYSTEM installation:
Files installed under SYSTEM profile are:
Not accessible via expected paths
These modern apps often:
When installed in SYSTEM context:
There is no universal solution. The correct approach depends on the application.
This ensures correct path resolution and application behavior.
A common mistake is combining user‑context installs with device‑based assignment, which can lead to inconsistent results.
When available, prefer vendor‑supplied enterprise or machine‑wide installers that:
If repackaging is unavoidable, additional work is required:
This typically requires custom scripting and deep application knowledge.
Deploy a SYSTEM‑level stub that triggers a user‑context installation at logon. Common techniques include:
This approach balances centralized control with correct execution context. This option provides flexibility, but it requires additional effort and is not trivial to implement, also requires ongoing maintenance.
Some applications are inherently user‑scoped. Adopting a deployment strategy that accommodates this reality reduces complexity and failures.
These practices often result in deployments that succeed technically but fail in real‑world use.
Before packaging any application, ask:
Where is this application designed to install?
If the answer is %LOCALAPPDATA%, treat it as a user‑context application by default.
This is not a tooling or platform issue. It is an alignment problem between application design and deployment context.
Modern applications are often built for user autonomy, minimal privileges, and self‑service updates. Forcing them into system‑level deployment models leads to avoidable failures.
Match the installation context to the application design.
When these align, deployments are stable and predictable. When they do not, troubleshooting “successful” deployments becomes inevitable.
If you encounter broken shortcuts or applications that will not launch after deployment, installation context should be one of the first factors you examine.