<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suat Can Geyik</title>
    <description>The latest articles on DEV Community by Suat Can Geyik (@scg).</description>
    <link>https://dev.to/scg</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3918769%2F8784df05-707e-4873-83e4-924233420f69.jpg</url>
      <title>DEV Community: Suat Can Geyik</title>
      <link>https://dev.to/scg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/scg"/>
    <language>en</language>
    <item>
      <title>Conquering Windows Server 2022: How to Manually Sideload Winget (Without the Microsoft Store)</title>
      <dc:creator>Suat Can Geyik</dc:creator>
      <pubDate>Sun, 10 May 2026 20:51:10 +0000</pubDate>
      <link>https://dev.to/scg/conquering-windows-server-2022-how-to-manually-sideload-winget-without-the-microsoft-store-2pmg</link>
      <guid>https://dev.to/scg/conquering-windows-server-2022-how-to-manually-sideload-winget-without-the-microsoft-store-2pmg</guid>
      <description>&lt;p&gt;Ever try to run a simple, modern command on a simplified Server OS?&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Not quite.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Environment Preparation and Execution Bypass
&lt;/h2&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Force PowerShell to use TLS 1.2 for secure web connections&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Net.ServicePointManager&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;SecurityProtocol&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;Net.SecurityProtocolType&lt;/span&gt;&lt;span class="p"&gt;]::&lt;/span&gt;&lt;span class="n"&gt;Tls12&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Temporarily bypass script execution restrictions&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-ExecutionPolicy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Bypass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Scope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Create and navigate to a working directory&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;New-Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-ItemType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Force&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Set-Location&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Logic&lt;/strong&gt;: 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Acquiring the Installation Assets
&lt;/h2&gt;

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

&lt;p&gt;Navigate to the official Winget releases page:&lt;br&gt;
&lt;a href="https://github.com/microsoft/winget-cli/releases" rel="noopener noreferrer"&gt;Github winget releases&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Locate the release with the green &lt;strong&gt;Latest&lt;/strong&gt; tag.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scroll to the Assets section and download these three items to your &lt;code&gt;C:\winget-init&lt;/code&gt; folder:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;DesktopAppInstaller_Dependencies.zip&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;XML License file&lt;/strong&gt; (e.g., &lt;code&gt;e53e159d00e04f729cc2180cffd1c02e_License1.xml&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Extract the contents of &lt;code&gt;DesktopAppInstaller_Dependencies.zip&lt;/code&gt; into your working folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Step 3: Framework &amp;amp; Dependency Injection
&lt;/h2&gt;

&lt;p&gt;The Server OS requires exact architectural dependencies (64-bit/x64) to be installed before the main application. Locate the extracted &lt;code&gt;_x64&lt;/code&gt;framework files (specifically VCLibs and UI.Xaml) and install them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Install the 64-bit Visual C++ libraries&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-AppxPackage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init\Microsoft.VCLibs.x64.14.00.Desktop.appx"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# Install the 64-bit UI Xaml framework&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-AppxPackage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init\Microsoft.UI.Xaml.2.8.x64.appx"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Logic:&lt;/strong&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Engine Installation
&lt;/h2&gt;

&lt;p&gt;With the prerequisites in place, install the main application bundle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-AppxPackage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: System-Wide Licensing (The Final Fix)
&lt;/h2&gt;

&lt;p&gt;If you run &lt;code&gt;winget&lt;/code&gt; 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.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Add-AppxProvisionedPackage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Online&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-PackagePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-LicensePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C:\winget-init\e53e159d00e04f729cc2180cffd1c02e_License1.xml"&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The Logic:&lt;/strong&gt; &lt;code&gt;Add-AppxProvisionedPackage&lt;/code&gt; provisions the app so that it is officially licensed and available for any user that logs into this server, bypassing the Store verification entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Verification and Cleanup
&lt;/h2&gt;

&lt;p&gt;Close your current PowerShell window to refresh the environment variables, open a new session, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once verified, you have successfully built a modern Package Manager environment on a legacy architecture&lt;/p&gt;

</description>
      <category>windows</category>
      <category>powershell</category>
      <category>azure</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
