惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
V
V2EX
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
小众软件
小众软件
Vercel News
Vercel News
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
J
Java Code Geeks
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
B
Blog
美团技术团队
量子位

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Conquering Windows Server 2022: How to Manually Sideload ...
Suat Can Gey · 2026-05-11 · via DEV Community

Suat Can Geyik

Ever try to run a simple, modern command on a simplified Server OS?

Recently, I deployed a Windows Server 2022 machine in my Azure tenant and needed to use Winget (the Windows Package Manager) to streamline my environment. It sounds like a standard five-minute task.

Not quite.

Because Server 2022 lacks the Microsoft Store by default, it also lacks the background infrastructure to manage modern app dependencies. What started as a simple command turned into a deep dive into missing UWP frameworks, architecture mismatches, and XML digital licenses.

Instead of doing things the old-fashioned way, I reverse-engineered the deployment process. Here is the step-by-step documentation for manually injecting dependencies and getting Winget running natively on a very basic Server OS.

Step 1: Environment Preparation and Execution Bypass

Before running package installation commands, we need to prepare the PowerShell environment to allow secure web communication and script execution. Open PowerShell as an Administrator and run:


# Force PowerShell to use TLS 1.2 for secure web connections
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# Temporarily bypass script execution restrictions
Set-ExecutionPolicy Bypass -Scope Process -Force

# Create and navigate to a working directory
New-Item -ItemType Directory -Force -Path "C:\winget-init"
Set-Location "C:\winget-init"

Enter fullscreen mode Exit fullscreen mode

The Logic: Modern endpoints (like GitHub) strictly require TLS 1.2. Forcing this ensures the connection isn't rejected. Additionally, setting the execution policy to Bypass temporarily lifts Server 2022's strict script restrictions just for this active window.

Step 2: Acquiring the Installation Assets

PowerShell's Invoke-WebRequest can occasionally fail on Azure VMs due to redirects. Downloading the assets manually via a web browser (like Edge) is the most reliable approach.

Navigate to the official Winget releases page:
Github winget releases

  1. Locate the release with the green Latest tag.

  2. Scroll to the Assets section and download these three items to your C:\winget-init folder:

  • DesktopAppInstaller_Dependencies.zip

  • Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle

  • The XML License file (e.g., e53e159d00e04f729cc2180cffd1c02e_License1.xml).

  1. Extract the contents of DesktopAppInstaller_Dependencies.zip into your working folder.

Step 3: Framework & Dependency Injection

The Server OS requires exact architectural dependencies (64-bit/x64) to be installed before the main application. Locate the extracted _x64framework files (specifically VCLibs and UI.Xaml) and install them:


# Install the 64-bit Visual C++ libraries
Add-AppxPackage -Path "C:\winget-init\Microsoft.VCLibs.x64.14.00.Desktop.appx"

# Install the 64-bit UI Xaml framework
Add-AppxPackage -Path "C:\winget-init\Microsoft.UI.Xaml.2.8.x64.appx"

Enter fullscreen mode Exit fullscreen mode

The Logic: Winget is a 64-bit application. If you attempt to install the x86 (32-bit) dependencies, the installation will fail with a 0x80073CF3 conflict error. We are manually fulfilling the prerequisites that the Microsoft Store normally handles.

Step 4: Engine Installation

With the prerequisites in place, install the main application bundle:


Add-AppxPackage -Path "C:\winget-init\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"

Enter fullscreen mode Exit fullscreen mode

Step 5: System-Wide Licensing (The Final Fix)

If you run winget now, it will return a "No applicable app licenses found" error. Because Server 2022 lacks the Store to verify digital entitlements, you must manually inject the XML license into the OS image using DISM.


Add-AppxProvisionedPackage -Online -PackagePath "C:\winget-init\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -LicensePath "C:\winget-init\e53e159d00e04f729cc2180cffd1c02e_License1.xml"

Enter fullscreen mode Exit fullscreen mode

The Logic: Add-AppxProvisionedPackage provisions the app so that it is officially licensed and available for any user that logs into this server, bypassing the Store verification entirely.

Step 6: Verification and Cleanup

Close your current PowerShell window to refresh the environment variables, open a new session, and run:


winget --version

Enter fullscreen mode Exit fullscreen mode

Once verified, you have successfully built a modern Package Manager environment on a legacy architecture