<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VDI &#8211; tazmenworld</title>
	<atom:link href="https://tazmenworld.com/category/vdi-solutions-et-optimisation-du-poste-de-travail-virtuel/feed/" rel="self" type="application/rss+xml" />
	<link>https://tazmenworld.com</link>
	<description>Mon site WordPress</description>
	<lastBuildDate>Mon, 29 Jun 2026 20:45:40 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Packager une application en MSIX pour Azure Virtual Desktop : le guide qui assume les galères</title>
		<link>https://tazmenworld.com/2026/06/29/packager-une-application-en-msix-pour-azure-virtual-desktop-le-guide-qui-assume-les-galeres/</link>
					<comments>https://tazmenworld.com/2026/06/29/packager-une-application-en-msix-pour-azure-virtual-desktop-le-guide-qui-assume-les-galeres/#respond</comments>
		
		<dc:creator><![CDATA[tazmen3]]></dc:creator>
		<pubDate>Mon, 29 Jun 2026 17:47:35 +0000</pubDate>
				<category><![CDATA[VDI]]></category>
		<guid isPermaLink="false">https://tazmenworld.com/?p=359</guid>

					<description><![CDATA[Tu vas tomber, en cherchant « MSIX App Attach », sur des dizaines de tutos qui te font croire que c&#8217;est trois clics dans un assistant. Tu lances MSIX Packaging Tool, tu cliques Next cinq fois, et hop, ton .msix est prêt. Sauf que c&#8217;est faux. Enfin, à moitié. L&#8217;assistant existe vraiment, et il fait bien le [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img width="1024" height="572"  alt="" class="wp-image-383"/ loading="eager" fetchpriority="high" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/msix-1024x572.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/msix-1024x572.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/06/msix-300x168.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/msix-768x429.jpg 768w, https://tazmenworld.com/wp-content/uploads/2026/06/msix-1536x858.jpg 1536w, https://tazmenworld.com/wp-content/uploads/2026/06/msix.jpg 1757w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Tu vas tomber, en cherchant « MSIX App Attach », sur des dizaines de tutos qui te font croire que c&rsquo;est trois clics dans un assistant. Tu lances MSIX Packaging Tool, tu cliques Next cinq fois, et hop, ton <code>.msix</code> est prêt.</p>



<p class="wp-block-paragraph">Sauf que c&rsquo;est faux. Enfin, à moitié.</p>



<p class="wp-block-paragraph">L&rsquo;assistant existe vraiment, et il fait bien le boulot. Le souci, c&rsquo;est tout ce qu&rsquo;il y a autour : le certificat de signature qui doit correspondre au pixel près au nom de l&rsquo;éditeur, le <code>0x8bad0001</code> que crache <code>msixmgr</code> quand la chaîne de confiance n&rsquo;est pas en place, le runtime Windows App SDK qui manque au moment de tester le package, et la source Microsoft Store de winget qui te claque un <code>0x8a15005e</code> à la figure sur une VM Azure. Aucun de ces pièges n&rsquo;est documenté côté à côté en français.</p>



<p class="wp-block-paragraph">Je viens de me les manger tous, dans l&rsquo;ordre, sur une VM de packaging Azure. Alors je te déroule le process complet : créer un package MSIX de A à Z avec <strong>Notepad++</strong> comme cobaye, jusqu&rsquo;au CIM prêt à attacher. Avec les pièges annoncés avant qu&rsquo;ils ne tombent.</p>



<p class="wp-block-paragraph">Une précision tout de suite : cet article s&rsquo;arrête au <strong>package</strong>. L&rsquo;attachement réel sur un host pool AVD (le storage Azure Files, les permissions SMB, la registration App Attach) mérite son propre guide, je le traiterai séparément. Ici, on fabrique l&rsquo;artefact. C&rsquo;est déjà bien assez pour un article.</p>



<h2 class="wp-block-heading">Pourquoi Notepad++ et pas 7-Zip ou un truc plus lourd</h2>



<p class="wp-block-paragraph">Petit aparté de méthode, parce que le choix de l&rsquo;app cobaye n&rsquo;est pas anodin.</p>



<p class="wp-block-paragraph">App Attach a une raison d&rsquo;être précise : livrer une application <strong>sans la coller dans le golden image</strong>. Typiquement une app volumineuse, licenciée par département, ou mise à jour souvent. Sur le papier, n&rsquo;importe quelle app fait l&rsquo;affaire pour un lab. En pratique, certaines sont de mauvais cobayes.</p>



<p class="wp-block-paragraph">7-Zip, par exemple, c&rsquo;est tentant parce que c&rsquo;est léger. Mais c&rsquo;est un mauvais exemple pédagogique : gratuit, 5 Mo, utile à tout le monde. Personne ne mettrait jamais ça en App Attach dans la vraie vie, tu l&rsquo;installes direct dans l&rsquo;image en trente secondes.</p>



<p class="wp-block-paragraph"><strong>Notepad++</strong> est un bien meilleur choix, pour trois raisons :</p>



<ul class="wp-block-list">
<li>Il se capture proprement. Installeur MSI simple, pas de services Windows, pas de drivers exotiques.</li>



<li>Il représente le cas réel « outil bureautique livré par groupe d&rsquo;utilisateurs ».</li>



<li>Depuis la <strong>v8.8.8, Notepad++ fournit un MSI x64</strong> officiel pour le déploiement entreprise. Et un MSI se capture toujours plus proprement qu&rsquo;un <code>.exe</code> à assistant graphique.</li>
</ul>



<p class="wp-block-paragraph">Au moment où j&rsquo;écris, la version stable est la <strong>8.9.6.4</strong>. C&rsquo;est celle qu&rsquo;on va packager.</p>



<h2 class="wp-block-heading">Le matériel : ce qu&rsquo;il te faut avant de commencer</h2>



<p class="wp-block-paragraph">On part d&rsquo;une <strong>VM de packaging propre</strong>. Le mot « propre » est important : pas de Notepad++ déjà installé dessus, idéalement un snapshot pris avant de commencer pour pouvoir revenir en arrière. MSIX Packaging Tool capture les changements du système pendant l&rsquo;installation. Si l&rsquo;app est déjà là, la capture est faussée.</p>



<p class="wp-block-paragraph">Voici les prérequis, et où je me suis fait avoir sur chacun :</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Élément</th><th>Détail</th><th>Le piège</th></tr></thead><tbody><tr><td>VM de packaging</td><td>Windows 10/11, hors domaine acceptée</td><td>Doit être propre, snapshot avant</td></tr><tr><td>MSIX Packaging Tool</td><td>via winget</td><td>La source <code>msstore</code> plante sur VM Azure</td></tr><tr><td>msixmgr.exe</td><td><code>https://aka.ms/msixmgr</code></td><td>Refuse de dépaqueter si le cert n&rsquo;est pas trusté</td></tr><tr><td>Certificat de signature</td><td>auto-signé OK en lab</td><td>Le subject doit matcher le Publisher au caractère près</td></tr><tr><td>Windows App Runtime</td><td>dépendance du package</td><td>Manque au test local, à installer à part</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">On y va dans l&rsquo;ordre.</p>



<h2 class="wp-block-heading">I. Installer MSIX Packaging Tool (et le piège msstore)</h2>



<p class="wp-block-paragraph">L&rsquo;outil s&rsquo;installe via winget. Première commande, premier mur :</p>



<p class="wp-block-paragraph">[CODE : install_msixtool.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>winget install Microsoft.MSIXPackagingTool</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">winget install Microsoft.MSIXPackagingTool</span></span></code></pre></div>



<p class="wp-block-paragraph">Et là, sur ma VM Azure, je me prends ça :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Failed when searching source: msstore
0x8a15005e : The server certificate did not match any of the expected values.</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">Failed when searching source: msstore</span></span>
<span class="line"><span style="color: #B48EAD">0x8a15005e</span><span style="color: #D8DEE9FF"> : The server certificate did not match any of the expected values.</span></span></code></pre></div>



<p class="wp-block-paragraph">Le souci, c&rsquo;est que winget interroge deux sources : <code>winget</code> et <code>msstore</code>. Sur une VM Azure, l&rsquo;accès au Microsoft Store est souvent restreint ou cassé côté certificat, et c&rsquo;est <code>msstore</code> qui fait planter la commande. Or le package est dispo sur la source <code>winget</code>, qui elle fonctionne.</p>



<p class="wp-block-paragraph">La parade, c&rsquo;est de forcer la source :</p>



<p class="wp-block-paragraph">[CODE : install_msixtool_fix.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>winget install Microsoft.MSIXPackagingTool --source winget</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">winget install Microsoft.MSIXPackagingTool </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF">source winget</span></span></code></pre></div>



<p class="wp-block-paragraph">Et là ça passe, propre.</p>



<figure class="wp-block-image size-large"><img width="1024" height="349"  alt="" class="wp-image-361"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/MSIXPackagingtool-1024x349.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/MSIXPackagingtool-1024x349.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/06/MSIXPackagingtool-300x102.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/MSIXPackagingtool-768x262.jpg 768w, https://tazmenworld.com/wp-content/uploads/2026/06/MSIXPackagingtool.jpg 1393w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Note le message en fin d&rsquo;install : l&rsquo;outil te prévient que le <strong>MSIX Packaging Tool Driver</strong> doit être activé séparément dans les fonctionnalités Windows. Bonne nouvelle, l&rsquo;outil sait l&rsquo;activer tout seul à son premier lancement. Mauvaise nouvelle, il peut s&rsquo;y reprendre à deux fois. On verra ça à l&rsquo;étape III, pas la peine de s&rsquo;en occuper maintenant.</p>



<h2 class="wp-block-heading">II. Le certificat de signature : là où tout le monde se plante</h2>



<p class="wp-block-paragraph">Un package MSIX doit être signé. En production tu utilises ta PKI interne ou un certificat public. En lab, un certificat auto-signé suffit, à condition de respecter une règle d&rsquo;or que je te donne tout de suite, parce que c&rsquo;est elle qui m&rsquo;a coûté le plus de temps.</p>



<p class="wp-block-paragraph"><strong>Le subject du certificat doit correspondre exactement au Publisher name du package.</strong> Au caractère près. Si ton cert dit <code>CN=Tazmen Lab, O=Tazmen, C=World</code>, ton Publisher dans MSIX Packaging Tool doit dire exactement la même chose. La moindre virgule de travers, et la signature échoue.</p>



<p class="wp-block-paragraph">On génère le certificat en PowerShell, en admin :</p>



<p class="wp-block-paragraph">[CODE : new_cert.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># Crée le dossier de travail
New-Item -ItemType Directory -Path "C:\Tools" -Force

# Génère le certificat auto-signé
$cert = New-SelfSignedCertificate `
  -Type CodeSigningCert `
  -Subject "CN=Tazmen Lab, O=Tazmen, C=World" `
  -KeyUsage DigitalSignature `
  -FriendlyName "MSIX Lab Signing" `
  -CertStoreLocation "Cert:\CurrentUser\My" `
  -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

# Exporte le .pfx (pour signer) et le .cer (pour la confiance)
$pwd = ConvertTo-SecureString -String "TonMotDePasse123!" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "C:\Tools\MSIXLabCert.pfx" -Password $pwd
Export-Certificate -Cert $cert -FilePath "C:\Tools\MSIXLabCert.cer"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88"># Crée le dossier de travail</span></span>
<span class="line"><span style="color: #88C0D0">New-Item</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">ItemType Directory </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Force</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Génère le certificat auto-signé</span></span>
<span class="line"><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">cert</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">New-SelfSignedCertificate</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Type CodeSigningCert </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Subject </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">CN=Tazmen Lab, O=Tazmen, C=World</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">KeyUsage DigitalSignature </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">FriendlyName </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">MSIX Lab Signing</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">CertStoreLocation </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Cert:\CurrentUser\My</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">TextExtension </span><span style="color: #81A1C1">@</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">2.5.29.37={text}1.3.6.1.5.5.7.3.3</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">2.5.29.19={text}</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Exporte le .pfx (pour signer) et le .cer (pour la confiance)</span></span>
<span class="line"><span style="color: #81A1C1">$</span><span style="color: #D8DEE9FF">pwd </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">ConvertTo-SecureString</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">String </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">TonMotDePasse123!</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Force </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">AsPlainText</span></span>
<span class="line"><span style="color: #88C0D0">Export-PfxCertificate</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Cert </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">cert</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">FilePath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\MSIXLabCert.pfx</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Password </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9FF">pwd</span></span>
<span class="line"><span style="color: #88C0D0">Export-Certificate</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Cert </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">cert</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">FilePath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\MSIXLabCert.cer</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Le <code>.pfx</code> contient la clé privée, il sert à <strong>signer</strong>. Le <code>.cer</code> ne contient que la partie publique, il sert à <strong>faire confiance</strong> au package sur les machines cibles.</p>



<p class="wp-block-paragraph">Je te préviens sur deux pièges vécus :</p>



<p class="wp-block-paragraph"><strong>Piège 1 : la variable <code>$cert</code> meurt avec la session.</strong> Si tu fermes PowerShell entre la création du cert et l&rsquo;export, <code>$cert</code> est vide et l&rsquo;export plante avec <code>Cannot bind argument to parameter 'Cert' because it is null</code>. Garde la même fenêtre PowerShell ouverte du début à la fin, ou regénère le cert dans la nouvelle session.</p>



<p class="wp-block-paragraph"><strong>Piège 2 : le dossier de destination doit exister.</strong> Si <code>C:\Tools</code> n&rsquo;existe pas, l&rsquo;export te sort un <code>Le chemin d'accès spécifié est introuvable. (0x80070003)</code>. D&rsquo;où le <code>New-Item</code> en première ligne. Ça paraît évident écrit comme ça, mais sur le moment on cherche midi à quatorze heures.</p>



<h2 class="wp-block-heading">III. La capture MSIX, écran par écran</h2>



<p class="wp-block-paragraph">Lance <strong>MSIX Packaging Tool</strong> depuis le menu Démarrer. Choisis <strong>Create package</strong>, puis <strong>Create your package on this computer</strong>.</p>



<figure class="wp-block-image size-full"><img width="978" height="737"  alt="" class="wp-image-368"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage-1.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage-1.jpg 978w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage-1-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage-1-768x579.jpg 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /></figure>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">Prepare computer</h3>



<p class="wp-block-paragraph">L&rsquo;outil vérifie l&rsquo;environnement. C&rsquo;est ici qu&rsquo;il installe le <strong>MSIX Packaging Tool Driver</strong> si besoin. Le « Checking&#8230; » peut traîner une minute ou deux, laisse-le faire.</p>



<p class="wp-block-paragraph">Deux lignes à regarder sur cet écran. <strong>Windows Update is active</strong> : l&rsquo;outil va le désactiver temporairement pendant la capture, c&rsquo;est normal et voulu. <strong>Pending reboot</strong> : si ta VM a un redémarrage en attente, l&rsquo;outil peut le réclamer. Le cas échéant, redémarre et relance.</p>



<figure class="wp-block-image size-full"><img width="980" height="740"  alt="" class="wp-image-367"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage2.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage2.jpg 980w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage2-300x227.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage2-768x580.jpg 768w" sizes="auto, (max-width: 980px) 100vw, 980px" /></figure>



<h3 class="wp-block-heading">Select installer</h3>



<p class="wp-block-paragraph">Trois champs à remplir :</p>



<ul class="wp-block-list">
<li><strong>Installer</strong> : pointe vers ton MSI Notepad++. Tu le télécharges d&rsquo;abord avec <code>Invoke-WebRequest</code> depuis la release GitHub officielle.</li>



<li><strong>Installer arguments</strong> : mets <code>/quiet /norestart</code> pour une install silencieuse.</li>



<li><strong>Signing preference</strong> : choisis <strong>Sign with a certificate (.pfx)</strong> et sélectionne ton <code>MSIXLabCert.pfx</code> avec son mot de passe.</li>
</ul>



<p class="wp-block-paragraph">[CODE : download_npp.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$url = "https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.9.6.4/npp.8.9.6.4.Installer.x64.msi"
Invoke-WebRequest -Uri $url -OutFile "C:\Temp\npp8964.msi"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">url</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.9.6.4/npp.8.9.6.4.Installer.x64.msi</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #88C0D0">Invoke-WebRequest</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Uri </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">url</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">OutFile </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Temp\npp8964.msi</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<figure class="wp-block-image size-full"><img width="982" height="740"  alt="" class="wp-image-366"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage4.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage4.jpg 982w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage4-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage4-768x579.jpg 768w" sizes="auto, (max-width: 982px) 100vw, 982px" /></figure>



<h3 class="wp-block-heading">Package information</h3>



<p class="wp-block-paragraph">C&rsquo;est l&rsquo;écran sensible. Souviens-toi de la règle d&rsquo;or : le <strong>Publisher name doit matcher le subject du certificat</strong>.</p>



<figure class="wp-block-image size-full"><img width="977" height="737"  alt="" class="wp-image-365"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage5.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage5.jpg 977w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage5-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage5-768x579.jpg 768w" sizes="auto, (max-width: 977px) 100vw, 977px" /></figure>



<p class="wp-block-paragraph">Quelques remarques sur les champs :</p>



<ul class="wp-block-list">
<li><strong>Package name</strong> : pas de caractères spéciaux. <code>Notepad++(x64)</code> est <strong>refusé</strong> (les <code>+</code> et les parenthèses ne passent pas). Mets <code>NotepadPlusPlus</code>.</li>



<li><strong>Package display name</strong> : là tu peux mettre <code>Notepad++ (x64)</code>, c&rsquo;est juste l&rsquo;affichage.</li>



<li><strong>Publisher name</strong> : exactement le subject du cert. L&rsquo;outil affiche d&rsquo;ailleurs « Subject of the certificate provided » à côté, pour te rappeler la contrainte.</li>



<li><strong>Version</strong> : attention, l&rsquo;outil pré-remplit souvent une version tronquée du genre <code>8.9.6.0</code>. La vraie version Notepad++ est <code>8.9.6.4</code>. Corrige le dernier champ. Petit aveu : je ne l&rsquo;ai pas fait sur le coup, mon package est sorti en <code>8.9.6.0</code>. Ce n&rsquo;est pas bloquant pour un lab, mais en prod tu veux que la version du package colle à la version réelle de l&rsquo;app.</li>
</ul>



<h3 class="wp-block-heading">Accelerator</h3>



<p class="wp-block-paragraph">Cet écran sert aux templates de conversion pré-configurés. Tu n&rsquo;en as pas besoin pour Notepad++. <strong>Next</strong>, sans rien renseigner.</p>



<figure class="wp-block-image size-full"><img width="977" height="733"  alt="" class="wp-image-364"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage6.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage6.jpg 977w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage6-300x225.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage6-768x576.jpg 768w" sizes="auto, (max-width: 977px) 100vw, 977px" /></figure>



<h3 class="wp-block-heading">Installation</h3>



<p class="wp-block-paragraph">L&rsquo;installeur MSI tourne en arrière-plan, en mode capture. Tu ne verras pas forcément l&rsquo;assistant graphique de Notepad++, c&rsquo;est normal, le <code>/quiet</code> fait son office. L&rsquo;écran te propose un <strong>Restart machine</strong> : <strong>ne clique pas dessus</strong>, Notepad++ n&rsquo;a pas besoin de redémarrage. <strong>Next</strong>.</p>



<figure class="wp-block-image size-full"><img width="982" height="743"  alt="" class="wp-image-370"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage7.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage7.jpg 982w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage7-300x227.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage7-768x581.jpg 768w" sizes="auto, (max-width: 982px) 100vw, 982px" /></figure>



<h3 class="wp-block-heading">First launch tasks</h3>



<p class="wp-block-paragraph">L&rsquo;outil a détecté <code>notepad++.exe</code> automatiquement, avec le bon chemin et l&rsquo;icône. Clique sur <strong>Run</strong> pour lancer Notepad++. C&rsquo;est l&rsquo;étape de validation : l&rsquo;app doit s&rsquo;ouvrir normalement. Vérifie qu&rsquo;elle démarre, puis <strong>ferme-la</strong>.</p>



<figure class="wp-block-image size-full"><img width="976" height="736"  alt="" class="wp-image-371"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage8.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage8.jpg 976w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage8-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage8-768x579.jpg 768w" sizes="auto, (max-width: 976px) 100vw, 976px" /></figure>



<p class="wp-block-paragraph">Une popup « Are you done? » apparaît. Tu as lancé l&rsquo;app, c&rsquo;est tout ce qu&rsquo;il fallait capturer. Clique <strong>Yes, move on</strong>.</p>



<figure class="wp-block-image size-large"><img width="1024" height="568"  alt="" class="wp-image-378"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1-1024x568.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1-1024x568.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1-300x166.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1-768x426.jpg 768w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1-1536x852.jpg 1536w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage9-1.jpg 1615w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Package report</h3>



<figure class="wp-block-image size-full"><img width="977" height="741"  alt="" class="wp-image-375"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage12.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage12.jpg 977w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage12-300x228.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage12-768x582.jpg 768w" sizes="auto, (max-width: 977px) 100vw, 977px" /></figure>



<p class="wp-block-paragraph"><strong>No services were detected</strong> : parfait pour Notepad++. Aucun service Windows à embarquer, le package reste propre. C&rsquo;est exactement pour ça que Notepad++ est un bon cobaye. <strong>Next</strong>.</p>



<h3 class="wp-block-heading">Create package</h3>



<p class="wp-block-paragraph">Dernière ligne droite. Change le <strong>Save location</strong> pour quelque chose de propre, par exemple <code>C:\Temp\</code>, plutôt que le Desktop par défaut. Puis <strong>Create</strong>.</p>



<figure class="wp-block-image size-full"><img width="977" height="737"  alt="" class="wp-image-376"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage13.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage13.jpg 977w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage13-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage13-768x579.jpg 768w" sizes="auto, (max-width: 977px) 100vw, 977px" /></figure>



<p class="wp-block-paragraph">Et voilà :</p>



<figure class="wp-block-image size-full"><img width="982" height="741"  alt="" class="wp-image-377"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage14.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage14.jpg 982w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage14-300x226.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage14-768x580.jpg 768w" sizes="auto, (max-width: 982px) 100vw, 982px" /></figure>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Package successfully created
C:\Temp\NotepadPlusPlus_8.9.6.0_x64__74sz6hfr72mwy.msix</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">Package successfully created</span></span>
<span class="line"><span style="color: #D8DEE9FF">C:\Temp\NotepadPlusPlus_8.</span><span style="color: #B48EAD">9.6</span><span style="color: #D8DEE9FF">.0_x64__74sz6hfr72mwy.msix</span></span></code></pre></div>



<p class="wp-block-paragraph">Le <code>.msix</code> signé est sur le disque. Première moitié du boulot faite.</p>



<h2 class="wp-block-heading">IV. Du MSIX au CIM avec msixmgr (et le fameux 0x8bad0001)</h2>



<p class="wp-block-paragraph">Pour App Attach, le <code>.msix</code> ne suffit pas. Il faut le « dépaqueter » dans une <strong>image disque</strong> que les session hosts monteront dynamiquement. Deux formats existent : VHDX et CIM. Microsoft recommande <strong>CIM</strong> : montage plus rapide, moins de CPU et de RAM consommés, surtout sur Windows 11. On part là-dessus.</p>



<p class="wp-block-paragraph">L&rsquo;outil pour ça, c&rsquo;est <code>msixmgr</code>, qu&rsquo;on télécharge sur le lien court Microsoft :</p>



<p class="wp-block-paragraph">[CODE : get_msixmgr.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Invoke-WebRequest -Uri "https://aka.ms/msixmgr" -OutFile "C:\Tools\msixmgr.zip"
Expand-Archive "C:\Tools\msixmgr.zip" -DestinationPath "C:\Tools\msixmgr" -Force</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Invoke-WebRequest</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Uri </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">https://aka.ms/msixmgr</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">OutFile </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\msixmgr.zip</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #88C0D0">Expand-Archive</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\msixmgr.zip</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">DestinationPath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\msixmgr</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Force</span></span></code></pre></div>



<p class="wp-block-paragraph">Puis on génère le CIM. Le dossier de destination doit exister, et il faut un sous-dossier dédié parce qu&rsquo;un CIM est composé de <strong>plusieurs fichiers</strong>, pas d&rsquo;un seul :</p>



<p class="wp-block-paragraph">[CODE : create_cim.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>New-Item -ItemType Directory -Path "C:\Temp\CIM\NotepadPlusPlus" -Force

C:\Tools\msixmgr\x64\msixmgr.exe `
  -Unpack `
  -packagePath "C:\Temp\NotepadPlusPlus_8.9.6.0_x64__74sz6hfr72mwy.msix" `
  -destination "C:\Temp\CIM\NotepadPlusPlus\notepadplusplus.cim" `
  -applyACLs `
  -create `
  -fileType CIM `
  -rootDirectory Apps</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">New-Item</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">ItemType Directory </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Temp\CIM\NotepadPlusPlus</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Force</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">C:\Tools\msixmgr\x64\</span><span style="color: #88C0D0">msixmgr.exe</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Unpack </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">packagePath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Temp\NotepadPlusPlus_8.9.6.0_x64__74sz6hfr72mwy.msix</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">destination </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Temp\CIM\NotepadPlusPlus\notepadplusplus.cim</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">applyACLs </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">create </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">fileType CIM </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">rootDirectory Apps</span></span></code></pre></div>



<p class="wp-block-paragraph">Et c&rsquo;est là que j&rsquo;ai buté un bon moment. Premier essai :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Successfully created the CIM file: ...notepadplusplus.cim
&#91;WARNING&#93; ... failed to get unpacked. Please try again:
Failed with HRESULT 0x8bad0001 when trying to unpack ...</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">Successfully created the CIM file: ...notepadplusplus.cim</span></span>
<span class="line"><span style="color: #ECEFF4">&#91;</span><span style="color: #81A1C1">WARNING</span><span style="color: #ECEFF4">&#93;</span><span style="color: #D8DEE9FF"> ..</span><span style="color: #81A1C1">.</span><span style="color: #D8DEE9FF"> failed to get unpacked. Please </span><span style="color: #81A1C1">try</span><span style="color: #D8DEE9FF"> again:</span></span>
<span class="line"><span style="color: #D8DEE9FF">Failed with HRESULT </span><span style="color: #B48EAD">0x8bad0001</span><span style="color: #D8DEE9FF"> when trying to unpack ...</span></span></code></pre></div>



<p class="wp-block-paragraph">Le truc vicieux, c&rsquo;est que le CIM <strong>est créé</strong> mais <strong>vide</strong>. Le message « Successfully created » te fait croire que c&rsquo;est bon, alors que le contenu du package n&rsquo;a pas été extrait. Si tu ne lis pas le warning juste en dessous, tu pars avec une coquille vide.</p>



<p class="wp-block-paragraph">Le <code>0x8bad0001</code> veut dire que <code>msixmgr</code> <strong>ne fait pas confiance au certificat</strong> qui a signé le package. Logique : c&rsquo;est un cert auto-signé, Windows ne le connaît pas. Il faut l&rsquo;installer dans les bons magasins de certificats de la machine locale.</p>



<p class="wp-block-paragraph">Première tentative, le magasin <strong>Trusted People</strong> :</p>



<p class="wp-block-paragraph">[CODE : trust_cert_people.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Import-Certificate `
  -FilePath "C:\Tools\MSIXLabCert.cer" `
  -CertStoreLocation "Cert:\LocalMachine\TrustedPeople"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Import-Certificate</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">FilePath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\MSIXLabCert.cer</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">CertStoreLocation </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Cert:\LocalMachine\TrustedPeople</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">J&rsquo;ai relancé <code>msixmgr</code>. Toujours <code>0x8bad0001</code>. Le hic, c&rsquo;est qu&rsquo;un certificat auto-signé est sa propre autorité racine : pour que la chaîne de confiance soit complète, il doit aussi être dans le magasin <strong>Trusted Root Certification Authorities</strong>.</p>



<p class="wp-block-paragraph">[CODE : trust_cert_root.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Import-Certificate `
  -FilePath "C:\Tools\MSIXLabCert.cer" `
  -CertStoreLocation "Cert:\LocalMachine\Root"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Import-Certificate</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">FilePath </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Tools\MSIXLabCert.cer</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">`</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">CertStoreLocation </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Cert:\LocalMachine\Root</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Windows t&rsquo;affiche un avertissement de sécurité à l&rsquo;import dans Root, confirme avec <strong>Oui</strong>. C&rsquo;est normal, tu déclares faire confiance à une autorité que tu viens de créer toi-même.</p>



<p class="wp-block-paragraph">Pour mettre toutes les chances de ton côté, active aussi le mode développeur qui lève les restrictions de signature MSIX en local :</p>



<p class="wp-block-paragraph">[CODE : enable_devmode.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>$regPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null }
Set-ItemProperty -Path $regPath -Name "AllowDevelopmentWithoutDevLicense" -Value 1
Set-ItemProperty -Path $regPath -Name "AllowAllTrustedApps" -Value 1</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">regPath</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">-not</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">(</span><span style="color: #88C0D0">Test-Path</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">regPath</span><span style="color: #ECEFF4">))</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">New-Item</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">regPath</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Force </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Out-Null</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span></span>
<span class="line"><span style="color: #88C0D0">Set-ItemProperty</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">regPath</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Name </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">AllowDevelopmentWithoutDevLicense</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Value </span><span style="color: #B48EAD">1</span></span>
<span class="line"><span style="color: #88C0D0">Set-ItemProperty</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #81A1C1">$</span><span style="color: #D8DEE9">regPath</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Name </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">AllowAllTrustedApps</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Value </span><span style="color: #B48EAD">1</span></span></code></pre></div>



<p class="wp-block-paragraph">Je nettoie le CIM raté, je le regénère, et cette fois :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;Warning&#93; The app ... depends on the following packages to run correctly:
Microsoft.WindowsAppRuntime.1.4
Successfully created the CIM file: C:\Temp\CIM\NotepadPlusPlus\notepadplusplus.cim</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #ECEFF4">&#91;</span><span style="color: #81A1C1">Warning</span><span style="color: #ECEFF4">&#93;</span><span style="color: #D8DEE9FF"> The app ..</span><span style="color: #81A1C1">.</span><span style="color: #D8DEE9FF"> depends on the following packages to run correctly:</span></span>
<span class="line"><span style="color: #D8DEE9FF">Microsoft.WindowsAppRuntime.</span><span style="color: #B48EAD">1.4</span></span>
<span class="line"><span style="color: #D8DEE9FF">Successfully created the CIM file: C:\Temp\CIM\NotepadPlusPlus\notepadplusplus.cim</span></span></code></pre></div>



<p class="wp-block-paragraph">Plus de <code>0x8bad0001</code>. Le CIM est rempli pour de bon. Le nouveau warning sur <code>Microsoft.WindowsAppRuntime.1.4</code> est juste informatif, on va le traiter à l&rsquo;étape suivante.</p>



<p class="wp-block-paragraph">En clair, pour qu&rsquo;un CIM se génère vraiment : le cert doit être dans <strong>TrustedPeople ET Root</strong> sur la machine de packaging. Les deux. Note-le bien.</p>



<h2 class="wp-block-heading">V. Tester le package en local (sans host pool)</h2>



<p class="wp-block-paragraph">Pas besoin d&rsquo;un host pool AVD pour valider que ton package fonctionne. Tu peux l&rsquo;installer directement sur la VM de packaging avec <code>Add-AppxPackage</code>. C&rsquo;est même recommandé avant de partir sur le déploiement.</p>



<p class="wp-block-paragraph">[CODE : install_local.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Add-AppxPackage -Path "C:\Temp\NotepadPlusPlus_8.9.6.0_x64__74sz6hfr72mwy.msix"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Add-AppxPackage</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Path </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">C:\Temp\NotepadPlusPlus_8.9.6.0_x64__74sz6hfr72mwy.msix</span><span style="color: #ECEFF4">&quot;</span></span></code></pre></div>



<p class="wp-block-paragraph">Et là, dernier piège de la série :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Add-AppxPackage : Deployment failed with HRESULT: 0x80073CF3
... this package depends on a framework that could not be found.
Provide the framework "Microsoft.WindowsAppRuntime.1.4" ...</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Add-AppxPackage</span><span style="color: #D8DEE9FF"> : Deployment failed with HRESULT: </span><span style="color: #B48EAD">0x80073CF3</span></span>
<span class="line"><span style="color: #D8DEE9FF">..</span><span style="color: #81A1C1">.</span><span style="color: #D8DEE9FF"> this package depends on a framework that could not be found.</span></span>
<span class="line"><span style="color: #D8DEE9FF">Provide the framework </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">Microsoft.WindowsAppRuntime.1.4</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> ...</span></span></code></pre></div>



<p class="wp-block-paragraph">C&rsquo;est exactement le warning qu&rsquo;on avait eu en générant le CIM. Notepad++ packagé en MSIX a besoin du <strong>Windows App Runtime 1.4</strong>, qui n&rsquo;est pas présent sur la VM. Il faut l&rsquo;installer à part.</p>



<p class="wp-block-paragraph">Le réflexe <code>Invoke-WebRequest</code> sur <code>aka.ms</code> m&rsquo;a donné un fichier corrompu (« The file or directory is corrupted and unreadable »), et le lien GitHub direct s&rsquo;est fait couper par le réseau de la VM. Ce qui a marché du premier coup, c&rsquo;est encore winget :</p>



<p class="wp-block-paragraph">[CODE : install_runtime.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>winget install Microsoft.WindowsAppRuntime.1.4 --source winget</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">winget install Microsoft.WindowsAppRuntime.</span><span style="color: #B48EAD">1.4</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--</span><span style="color: #D8DEE9FF">source winget</span></span></code></pre></div>



<figure class="wp-block-image size-large"><img width="1024" height="242"  alt="" class="wp-image-380"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage16-1024x242.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage16-1024x242.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage16-300x71.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage16-768x181.jpg 768w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage16.jpg 1187w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">60,6 Mo téléchargés, installé. Je relance l&rsquo;install du package, et cette fois Notepad++ apparaît dans le menu Démarrer et se lance comme une app native.</p>



<figure class="wp-block-image size-large"><img width="1024" height="557"  alt="" class="wp-image-382"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage15-1-1024x557.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage15-1-1024x557.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage15-1-300x163.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage15-1-768x418.jpg 768w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage15-1.jpg 1382w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img width="740" height="513"  alt="" class="wp-image-381"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage17.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/06/newpackage17.jpg 740w, https://tazmenworld.com/wp-content/uploads/2026/06/newpackage17-300x208.jpg 300w" sizes="auto, (max-width: 740px) 100vw, 740px" /></figure>



<p class="wp-block-paragraph">Pour le désinstaller après ton test :</p>



<p class="wp-block-paragraph">[CODE : uninstall_local.ps1]</p>



<p class="wp-block-paragraph">powershell</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Get-AppxPackage -Name "NotepadPlusPlus" | Remove-AppxPackage</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #88C0D0">Get-AppxPackage</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Name </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">NotepadPlusPlus</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">|</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Remove-AppxPackage</span></span></code></pre></div>



<p class="wp-block-paragraph">À retenir pour la suite : sur tes session hosts AVD, ce runtime devra <strong>aussi</strong> être présent, soit dans le golden image, soit poussé par Intune ou GPO avant l&rsquo;attachement. Une dépendance manquante côté host, et ton app refusera de démarrer même parfaitement packagée.</p>



<h2 class="wp-block-heading">Ce que je retiens</h2>



<p class="wp-block-paragraph">Le packaging MSIX en lui-même n&rsquo;est pas compliqué. L&rsquo;assistant fait le job. Ce qui coince, c&rsquo;est la chaîne de confiance et les dépendances, et aucun de ces points n&rsquo;est mis en avant dans les tutos « trois clics ».</p>



<p class="wp-block-paragraph">Si tu ne devais retenir que quatre choses :</p>



<ol class="wp-block-list">
<li><strong>Force <code>--source winget</code></strong> sur les VMs Azure, la source msstore est cassée.</li>



<li><strong>Le Publisher name = le subject du cert</strong>, au caractère près, sinon la signature saute.</li>



<li><strong>Le cert auto-signé va dans TrustedPeople ET Root</strong>, sinon <code>msixmgr</code> sort un <code>0x8bad0001</code> et te génère un CIM vide en te faisant croire que tout va bien.</li>



<li><strong>Le Windows App Runtime est une dépendance à installer séparément</strong>, sur la VM de test comme sur les session hosts.</li>
</ol>



<p class="wp-block-paragraph">À ce stade tu as un <code>.msix</code> signé, testé et validé, et un CIM prêt à être attaché. C&rsquo;est tout ce dont tu as besoin pour la suite.</p>



<p class="wp-block-paragraph">Et la suite, justement, c&rsquo;est l&rsquo;attachement réel : monter le CIM sur un Azure Files, gérer les permissions SMB quand tes session hosts sont hors domaine AD classique, et faire la registration App Attach côté host pool. Ça, ça mérite son propre guide, parce que c&rsquo;est un autre niveau de pièges. Je le détaillerai dans un article séparé.</p>



<p class="wp-block-paragraph">A bientôt Louis 🐇 🤜 🤛 🐰</p>
]]></content:encoded>
					
					<wfw:commentRss>https://tazmenworld.com/2026/06/29/packager-une-application-en-msix-pour-azure-virtual-desktop-le-guide-qui-assume-les-galeres/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Alerte Infra : La mutation des scans Citrix vers les réseaux résidentiels (Analyse Deep Dive)</title>
		<link>https://tazmenworld.com/2026/02/05/alerte-infra-la-mutation-des-scans-citrix-vers-les-reseaux-residentiels-analyse-deep-dive/</link>
					<comments>https://tazmenworld.com/2026/02/05/alerte-infra-la-mutation-des-scans-citrix-vers-les-reseaux-residentiels-analyse-deep-dive/#respond</comments>
		
		<dc:creator><![CDATA[tazmen3]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 13:41:13 +0000</pubDate>
				<category><![CDATA[VDI]]></category>
		<guid isPermaLink="false">https://tazmenworld.com/?p=90</guid>

					<description><![CDATA[La fin de la sécurité périmétrique statique Pendant des années, la défense périmétrique reposait sur un postulat simple : le trafic malveillant provient d&#8217;IPs réputées « sales » (Tor, Datacenters exotiques, VPNs gratuits). Cette époque est révolue. L&#8217;alerte émise par GreyNoise concernant l&#8217;activité entre le 28 janvier et le 2 février 2026 marque un tournant industriel dans [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img width="1024" height="559"  alt="" class="wp-image-92"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/02/unnamed-44.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/02/unnamed-44.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/02/unnamed-44-300x164.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/02/unnamed-44-768x419.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">La fin de la sécurité périmétrique statique</h2>



<p class="wp-block-paragraph">Pendant des années, la défense périmétrique reposait sur un postulat simple : le trafic malveillant provient d&rsquo;IPs réputées « sales » (Tor, Datacenters exotiques, VPNs gratuits). Cette époque est révolue. L&rsquo;alerte émise par GreyNoise concernant l&rsquo;activité entre le 28 janvier et le 2 février 2026 marque un tournant industriel dans la reconnaissance offensive.</p>



<p class="wp-block-paragraph">Nous ne parlons pas ici d&rsquo;un « script kiddie » scannant depuis son VPS DigitalOcean. Nous faisons face à une infrastructure de <strong>63 000+ adresses IP résidentielles</strong> (RESIP) mobilisées pour cartographier les instances Citrix ADC / NetScaler mondiales. Pour un ingénieur infrastructure, cela signifie que le bruit de fond de l&rsquo;internet est devenu l&rsquo;arme principale des attaquants.</p>



<h2 class="wp-block-heading">1. Anatomie Technique de la Campagne</h2>



<p class="wp-block-paragraph">L&rsquo;attaque se distingue par une dichotomie intéressante entre l&rsquo;infrastructure réseau utilisée et la payload applicative.</p>



<h3 class="wp-block-heading">A. L&rsquo;Infrastructure : Le paradoxe de l&rsquo;OS</h3>



<p class="wp-block-paragraph">L&rsquo;analyse des paquets TCP révèle une sophistication dans l&rsquo;obfuscation.</p>



<ul class="wp-block-list">
<li><strong>La source apparente :</strong> Des IPs résidentielles (FAI grand public : Orange, Comcast, Verizon, etc.). Impossible de les bloquer massivement sans impacter des utilisateurs légitimes (télétravail, partenaires).</li>



<li><strong>La signature TCP :</strong> C&rsquo;est ici que l&rsquo;analyse devient fascinante. Bien que les IPs appartiennent à des machines infectées (probablement des botnets Windows grand public), le <em>fingerprinting</em> de la stack TCP indique que le trafic de scan est initié ou relayé par des machines <strong>Linux</strong>.</li>



<li><strong>Interprétation :</strong> Les attaquants utilisent les machines Windows compromises comme de simples tunnels (proxies), tandis que la logique de scan est exécutée depuis des serveurs de commande Linux centralisés. Cela permet de masquer la véritable origine tout en bénéficiant de la « blancheur » des IPs résidentielles.</li>
</ul>



<h3 class="wp-block-heading">B. La Méthodologie de Ciblage (Le « Two-Step »)</h3>



<p class="wp-block-paragraph">La campagne ne tire pas à l&rsquo;aveugle. Elle suit une logique économique stricte pour économiser les ressources du botnet :</p>



<ol start="1" class="wp-block-list">
<li><strong>Phase 1 : Identification du Service (Broad Scan)</strong> Les bots cherchent d&rsquo;abord les panneaux de connexion Citrix (les portails Gateway). C&rsquo;est un scan volumétrique (plus de 111 000 sessions détectées).</li>



<li><strong>Phase 2 : Fingerprinting de Version (Targeted Probe)</strong> Une fois la cible validée, une seconde requête, souvent issue d&rsquo;une IP différente (parfois Cloud/Datacenter pour la vitesse), interroge une URL spécifique : <code>/epa/scripts/win/nsepa_setup.exe</code></li>
</ol>



<h3 class="wp-block-heading">C. Pourquoi ce fichier .EXE ?</h3>



<p class="wp-block-paragraph">Pourquoi télécharger un exécutable de 20 Mo ? Pour lire ses métadonnées. Ce fichier, utilisé pour l&rsquo;<em>Endpoint Analysis</em> (EPA), est souvent accessible publiquement même sans authentification. En analysant les propriétés du binaire (Date de compilation, Version interne), l&rsquo;attaquant peut déduire avec une certitude de 100% la version du firmware du NetScaler (ex: 13.1 Build 49.13). <strong>Résultat :</strong> Ils ne cherchent pas à entrer <em>maintenant</em>. Ils construisent une base de données qualifiée (« Hit List ») associant <code>IP : Version</code>. Le jour où une CVE sortira sur la version 13.1, ils sauront exactement qui frapper dans les 15 minutes.</p>



<figure class="wp-block-image size-large"><img width="1024" height="851"  alt="" class="wp-image-91"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/02/image-1-1024x851.png" srcset="https://tazmenworld.com/wp-content/uploads/2026/02/image-1-1024x851.png 1024w, https://tazmenworld.com/wp-content/uploads/2026/02/image-1-300x249.png 300w, https://tazmenworld.com/wp-content/uploads/2026/02/image-1-768x638.png 768w, https://tazmenworld.com/wp-content/uploads/2026/02/image-1.png 1354w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">2. Impacts sur l&rsquo;Infrastructure et la Sécurité</h2>



<p class="wp-block-paragraph">Cette campagne met en échec plusieurs couches de défense standards.</p>



<h3 class="wp-block-heading">L&rsquo;effondrement de la Réputation IP</h3>



<p class="wp-block-paragraph">Vos feeds de Threat Intelligence (Cisco Talos, Crowdsource, etc.) ont généralement un temps de latence de 24 à 48h. Ici, les IPs résidentielles tournent trop vite. Le temps que l&rsquo;IP soit « blacklistée », l&rsquo;attaquant est déjà passé à la suivante. Votre pare-feu, s&rsquo;il est configuré uniquement sur la réputation Layer 3/4, est aveugle.</p>



<h3 class="wp-block-heading">Le risque de « False Negative » dans le SOC</h3>



<p class="wp-block-paragraph">Pour un analyste SOC, ce trafic ressemble à du trafic utilisateur légitime.</p>



<ul class="wp-block-list">
<li>User-Agent : <code>Mozilla/5.0 ... Chrome/50...</code></li>



<li>Source : IP FAI résidentiel.</li>



<li>Comportement : Accès à une page de login ou téléchargement d&rsquo;un plugin client. Sans corrélation avancée, cette activité passe sous les radars comme du « bruit » ou des erreurs de connexion.</li>
</ul>



<h3 class="wp-block-heading">Le Talon d&rsquo;Achille : Chrome 50</h3>



<p class="wp-block-paragraph">L&rsquo;erreur opérationnelle (OpSec) des attaquants est l&rsquo;utilisation d&rsquo;un User-Agent datant de 2016 (<code>Chrome/50</code>). C&rsquo;est une anomalie statistique énorme en 2026. Aucun utilisateur réel, même avec un vieux PC, ne navigue avec cette version. C&rsquo;est votre principal IOC (Indicator of Compromise).</p>



<h2 class="wp-block-heading">3. Recommandations et Durcissement (Hardening)</h2>



<p class="wp-block-paragraph">Il ne s&rsquo;agit plus de « patcher », mais de durcir la configuration pour réduire la surface d&rsquo;information.</p>



<h3 class="wp-block-heading">🛡️ Niveau 1 : Filtrage au niveau du NetScaler (WAF/Responder)</h3>



<p class="wp-block-paragraph">L&rsquo;objectif est de tuer la connexion avant qu&rsquo;elle ne consomme des ressources CPU/RAM.</p>



<p class="wp-block-paragraph"><strong>Action :</strong> Bloquer les User-Agents anachroniques. Insérez cette politique en haut de votre liste de bind :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># Détection des UA Chrome 50 (ou versions trop anciennes)
add responder policy POL_DROP_ANCIENT_UA "HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"Chrome/50\") || HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"Chrome/4\")" DROP

# Application globale (ou sur vos vServer Gateway)
bind lb vserver &lt;Votre_Vserver> -policyName POL_DROP_ANCIENT_UA -priority 10</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #616E88"># Détection des UA Chrome 50 (ou versions trop anciennes)</span></span>
<span class="line"><span style="color: #D8DEE9FF">add responder policy POL_DROP_ANCIENT_UA </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">HTTP.REQ.HEADER(\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">User</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Agent\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">).CONTAINS(\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">Chrome</span><span style="color: #81A1C1">/</span><span style="color: #B48EAD">50</span><span style="color: #D8DEE9FF">\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">) || HTTP.REQ.HEADER(\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">User</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">Agent\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">).CONTAINS(\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF">Chrome</span><span style="color: #81A1C1">/</span><span style="color: #B48EAD">4</span><span style="color: #D8DEE9FF">\</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">)</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> DROP</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88"># Application globale (ou sur vos vServer Gateway)</span></span>
<span class="line"><span style="color: #D8DEE9FF">bind lb vserver </span><span style="color: #81A1C1">&lt;</span><span style="color: #D8DEE9FF">Votre_Vserver</span><span style="color: #81A1C1">&gt;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">policyName POL_DROP_ANCIENT_UA </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">priority </span><span style="color: #B48EAD">10</span></span></code></pre></div>



<h3 class="wp-block-heading">🛡️ Niveau 2 : Obfuscation de la Version (Security by Obscurity)</h3>



<p class="wp-block-paragraph">Bien que controversée, masquer la version exacte complique la tâche des bots automatisés. <strong>Action :</strong> Si vous n&rsquo;utilisez pas les fonctionnalités EPA (Endpoint Analysis), désactivez les chemins d&rsquo;accès ou restreignez-les via des règles de réécriture (Rewrite Policies) pour renvoyer une 403 Forbidden sur <code>/epa/*</code> pour les IPs non authentifiées.</p>



<h3 class="wp-block-heading">🛡️ Niveau 3 : Surveillance Logique (SIEM)</h3>



<p class="wp-block-paragraph">Configurez vos outils (Splunk, ELK, Datadog) pour lever une alerte si :</p>



<ol start="1" class="wp-block-list">
<li>Une même IP accède à <code>/epa/scripts/win/nsepa_setup.exe</code>.</li>



<li>ET que cette IP n&rsquo;a pas généré de log d&rsquo;authentification (réussie ou échouée) dans les 60 secondes précédentes. Cela isole le comportement de « Scan » du comportement d&rsquo;un utilisateur réel qui téléchargerait le plugin après s&rsquo;être logué.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Cette campagne de février 2026 nous rappelle une leçon cruelle : <strong>votre infrastructure publique est scannée en permanence.</strong> L&rsquo;utilisation massive de proxies résidentiels par les attaquants nivelle par le bas l&rsquo;efficacité des pare-feux traditionnels. La réponse n&rsquo;est pas technologique, elle est architecturale : minimiser l&rsquo;exposition des métadonnées (versioning), adopter une posture « Zero Trust » même pour les accès publics, et baser la détection sur le comportement (User-Agent, chemin d&rsquo;accès) plutôt que sur l&rsquo;origine IP.</p>



<p class="wp-block-paragraph">Source des données brutes : <a target="_blank" rel="noreferrer noopener" href="https://www.labs.greynoise.io/grimoire/2026-02-02-citrix-recon-residential-proxies/index.html">GreyNoise Intelligence</a></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tazmenworld.com/2026/02/05/alerte-infra-la-mutation-des-scans-citrix-vers-les-reseaux-residentiels-analyse-deep-dive/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Azure Virtual Desktop : Analyse des Regional Host Pools (Public Preview) et de la Souveraineté des Métadonnées</title>
		<link>https://tazmenworld.com/2026/01/28/azure-virtual-desktop-analyse-des-regional-host-pools-public-preview-et-de-la-souverainete-des-metadonnees/</link>
					<comments>https://tazmenworld.com/2026/01/28/azure-virtual-desktop-analyse-des-regional-host-pools-public-preview-et-de-la-souverainete-des-metadonnees/#respond</comments>
		
		<dc:creator><![CDATA[tazmen3]]></dc:creator>
		<pubDate>Wed, 28 Jan 2026 15:47:44 +0000</pubDate>
				<category><![CDATA[VDI]]></category>
		<guid isPermaLink="false">https://tazmenworld.com/?p=78</guid>

					<description><![CDATA[L&#8217;architecture d&#8217;Azure Virtual Desktop (AVD) franchit une étape significative en matière de conformité et de performance. Microsoft vient d&#8217;annoncer la disponibilité en Public Preview des Regional Host Pools. Cette fonctionnalité répond à une problématique centrale pour les architectes DaaS (Desktop as a Service) opérant dans des environnements régulés : la localisation des métadonnées de service. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img width="1024" height="572"  alt="" class="wp-image-83"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/01/unnamed-47.jpg" srcset="https://tazmenworld.com/wp-content/uploads/2026/01/unnamed-47.jpg 1024w, https://tazmenworld.com/wp-content/uploads/2026/01/unnamed-47-300x168.jpg 300w, https://tazmenworld.com/wp-content/uploads/2026/01/unnamed-47-768x429.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">L&rsquo;architecture d&rsquo;Azure Virtual Desktop (AVD) franchit une étape significative en matière de conformité et de performance. Microsoft vient d&rsquo;annoncer la disponibilité en <strong>Public Preview des Regional Host Pools</strong>. Cette fonctionnalité répond à une problématique centrale pour les architectes DaaS (Desktop as a Service) opérant dans des environnements régulés : la localisation des métadonnées de service.</p>



<p class="wp-block-paragraph">Jusqu&rsquo;à présent, la conception d&rsquo;AVD imposait une dichotomie entre la localisation des ressources de calcul (les machines virtuelles des hôtes de session) et celle des métadonnées de configuration du service. Cette annonce permet enfin d&rsquo;aligner ces deux composantes critiques.</p>



<h2 class="wp-block-heading">1. Analyse Technique</h2>



<p class="wp-block-paragraph">Pour comprendre l&rsquo;impact de cette annonce, il faut revenir sur l&rsquo;architecture fondamentale du plan de contrôle (Control Plane) d&rsquo;AVD, géré par Microsoft.</p>



<h3 class="wp-block-heading">Le paradigme historique : Géographie vs Région</h3>



<p class="wp-block-paragraph">Historiquement, lorsque vous déployiez un Host Pool AVD, vous deviez sélectionner une <strong>géographie</strong> pour le stockage des métadonnées (par exemple, « États-Unis », « Europe », « Japon »). Ces métadonnées incluent les configurations des Host Pools, des App Groups et des Workspaces, ainsi que les attributions d&rsquo;utilisateurs.</p>



<p class="wp-block-paragraph">Parallèlement, vos hôtes de session (les VMs où travaillent les utilisateurs) étaient déployés dans une <strong>région Azure</strong> spécifique (par exemple, « France Central », « Germany West Central »).</p>



<p class="wp-block-paragraph">Cette architecture créait une dissonance : vos données utilisateurs pouvaient résider en Allemagne, mais la configuration du service indiquant qui a accès à quoi était stockée dans une base de données globale située ailleurs dans la géographie européenne.</p>



<figure class="wp-block-image size-full"><img width="624" height="130"  alt="" class="wp-image-80"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/01/Picture1.png" srcset="https://tazmenworld.com/wp-content/uploads/2026/01/Picture1.png 624w, https://tazmenworld.com/wp-content/uploads/2026/01/Picture1-300x63.png 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></figure>



<h3 class="wp-block-heading">Le nouveau modèle : Alignement Régional</h3>



<p class="wp-block-paragraph">Avec les Regional Host Pools en Public Preview, il est désormais possible de stocker les métadonnées du service AVD dans la <strong>même région Azure</strong> que les hôtes de session.</p>



<p class="wp-block-paragraph">Le plan de contrôle AVD devient distribué. Lorsqu&rsquo;un utilisateur initie une connexion, le broker AVD interroge une base de données locale à la région, plutôt qu&rsquo;une base de données consolidée au niveau géographique.</p>



<p class="wp-block-paragraph">Les régions initialement supportées dans cette preview incluent des zones stratégiques en termes de conformité :</p>



<ul class="wp-block-list">
<li>Germany West Central</li>



<li>UK South</li>



<li>Central India</li>



<li>Canada Central</li>



<li>(Liste complète incluant US, Japan, Australia, South Africa et North Europe dans l&rsquo;annonce officielle).</li>
</ul>



<p class="wp-block-paragraph">Il est crucial de noter que cette fonctionnalité ne concerne que les <strong>métadonnées de service</strong>. Les profils utilisateurs (FSLogix) et les images disques des VMs ont toujours pu être localisés précisément ; c&rsquo;est le dernier maillon de la chaîne de configuration qui est ici traité.</p>



<figure class="wp-block-image size-full"><img width="624" height="447"  alt="" class="wp-image-81"/ loading="lazy" decoding="async" src="https://tazmenworld.com/wp-content/uploads/2026/01/Picture2.png" srcset="https://tazmenworld.com/wp-content/uploads/2026/01/Picture2.png 624w, https://tazmenworld.com/wp-content/uploads/2026/01/Picture2-300x215.png 300w" sizes="auto, (max-width: 624px) 100vw, 624px" /></figure>



<h2 class="wp-block-heading">2. Impacts sur l&rsquo;Infrastructure</h2>



<p class="wp-block-paragraph">L&rsquo;introduction des Regional Host Pools a des conséquences directes et positives sur la conception des infrastructures VDI/DaaS dans Azure.</p>



<h3 class="wp-block-heading">Souveraineté des données et Conformité (Compliance)</h3>



<p class="wp-block-paragraph">C&rsquo;est l&rsquo;impact majeur. Pour les entreprises soumises à des régulations strictes sur la résidence des données (RGPD en Europe, régulations fédérales en Allemagne, etc.), l&rsquo;ancien modèle posait problème. Les auditeurs pouvaient tiquer sur le fait que des informations de configuration, même sans données personnelles directes, sortaient des frontières nationales.</p>



<p class="wp-block-paragraph">En alignant métadonnées et compute dans des régions comme <code>Germany West Central</code> ou <code>Central India</code>, l&rsquo;architecture DaaS devient intrinsèquement plus conforme aux exigences de souveraineté numérique locales.</p>



<h3 class="wp-block-heading">Latence et Performance du Control Plane</h3>



<p class="wp-block-paragraph">Bien que l&rsquo;impact sur la latence en session (la frappe au clavier) soit nul, l&rsquo;impact sur la <strong>phase d&rsquo;initialisation de la connexion</strong> peut être positif.</p>



<p class="wp-block-paragraph">Le processus de brokering (authentification, identification des ressources disponibles, redirection vers un hôte) implique des requêtes vers le stockage des métadonnées. En rapprochant ce stockage du point d&rsquo;entrée de l&rsquo;utilisateur et des VMs cibles, on réduit potentiellement les délais de transit réseau sur le backbone Azure durant cette phase critique de « Logon ».</p>



<h2 class="wp-block-heading">3. Recommandations</h2>



<p class="wp-block-paragraph">En tant qu&rsquo;architectes d&rsquo;infrastructure, comment devons-nous appréhender cette nouveauté ?</p>



<ol start="1" class="wp-block-list">
<li><strong>Posture « Public Preview » :</strong> Comme pour toute fonctionnalité en preview, elle n&rsquo;est assortie d&rsquo;aucun SLA (Service Level Agreement). Il est donc formellement déconseillé de l&rsquo;utiliser pour des charges de travail de production critiques immédiates.</li>



<li><strong>Stratégie de Test :</strong> C&rsquo;est le moment idéal pour déployer des environnements de POC (Proof of Concept) dans les régions supportées si vous avez des exigences de compliance dans ces zones. Validez le comportement du broker et assurez-vous que tous vos outils tiers (monitoring, automation) interagissent correctement avec ces nouveaux objets régionaux.</li>



<li><strong>Pas de Migration In-Place :</strong> Point d&rsquo;attention critique, Microsoft ne propose actuellement <strong>aucun chemin de migration</strong> pour les Host Pools existants. Vous ne pouvez pas déplacer un Host Pool « géographique » vers un modèle « régional ».
<ul class="wp-block-list">
<li><em>Action :</em> L&rsquo;adoption nécessitera une stratégie de déploiement « greenfield » (nouveau déploiement) suivi d&rsquo;une bascule des utilisateurs, plutôt qu&rsquo;une mise à niveau transparente.</li>
</ul>
</li>



<li><strong>Infrastructure as Code (IaC) :</strong> Mettez à jour vos templates Bicep ou Terraform. Vos paramètres <code>location</code> pour les ressources <code>Microsoft.DesktopVirtualization/hostPools</code> devront désormais pointer vers des régions spécifiques (ex: <code>germanywestcentral</code>) et non plus des géographies, pour les déploiements ciblant cette nouvelle architecture.</li>
</ol>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">L&rsquo;arrivée des Regional Host Pools pour Azure Virtual Desktop est une évolution mature du service. Elle démontre la volonté de Microsoft d&rsquo;adapter son offre DaaS aux réalités complexes de la conformité internationale et de la souveraineté des données, levant ainsi un frein important à l&rsquo;adoption d&rsquo;AVD dans des secteurs hautement régulés.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Source : <a target="_blank" rel="noreferrer noopener" href="https://techcommunity.microsoft.com/blog/azurevirtualdesktopblog/now-in-public-preview-azure-virtual-desktop-regional-host-pools/4474598">https://techcommunity.microsoft.com/blog/azurevirtualdesktopblog/now-in-public-preview-azure-virtual-desktop-regional-host-pools/4474598</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tazmenworld.com/2026/01/28/azure-virtual-desktop-analyse-des-regional-host-pools-public-preview-et-de-la-souverainete-des-metadonnees/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
