<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Deployment on kenji.blog</title><link>http://kenji.blog/ar/tags/deployment/</link><description>Recent content in Deployment on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/tags/deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>دليل إنشاء حزم MSIX لنظام Windows 11 وفخ شهادة التوقيع الذاتي</title><link>http://kenji.blog/ar/p/windows-11-msix-packaging-guide/</link><pubDate>Sat, 12 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/windows-11-msix-packaging-guide/</guid><description>&lt;img src="http://kenji.blog/p/windows-11-msix-packaging-guide/img/eyecatch.jpg" alt="Featured image of post دليل إنشاء حزم MSIX لنظام Windows 11 وفخ شهادة التوقيع الذاتي" />&lt;p>في عصر Windows 11، أصبح &amp;ldquo;MSIX&amp;rdquo; هو الخيار القياسي لتنسيق توزيع التطبيقات. على الرغم من أن المثبتات التقليدية مثل MSI و EXE كانت تعاني من العديد من المشاكل، إلا أنه من المتوقع أن يحل MSIX هذه المشاكل كتقنية حزم من الجيل التالي. ومع ذلك، عندما يحاول المطورون إنشاء حزمة MSIX وإجراء التحميل الجانبي (Sideloading) في بيئة تنظيمية أو اختبارية، غالباً ما يقعون في &amp;ldquo;فخ شهادة التوقيع الذاتي&amp;rdquo;.&lt;/p>
&lt;p>في هذه المقالة، سنشرح بالتفصيل التفاصيل الفنية لـ MSIX، وكيفية إنشاء الحزم باستخدام Visual Studio وأدوات سطر الأوامر، بالإضافة إلى أسباب وحلول الأخطاء المتعلقة بشهادة التوقيع الذاتي التي يواجهها العديد من المطورين. نأمل أن يكون هذا دليلاً لا غنى عنه لمطوري تطبيقات Windows، ومسؤولي البنية التحتية، والمسؤولين عن الحزم.&lt;/p>
&lt;h2 id="1-ما-هو-msix-مقارنة-مع-msiexe-التقليدية">1. ما هو MSIX؟ مقارنة مع MSI/EXE التقليدية
&lt;/h2>&lt;p>MSIX هو أحدث تنسيق لحزم التطبيقات لنظام Windows تقدمه Microsoft. يجمع بين جميع الميزات والمفاهيم الممتازة من MSI (Microsoft Installer) التقليدي، والمثبتات المخصصة المستندة إلى .exe، و App-V (Application Virtualization)، و AppX (حزم تطبيقات Universal Windows Platform) التي تم تقديمها منذ Windows 8، بالإضافة إلى تطوره ليتناسب مع متطلبات الأمان والنشر الحديثة.&lt;/p>
&lt;h3 id="مشاكل-المثبتات-التقليدية-msiexe">مشاكل المثبتات التقليدية (MSI/EXE)
&lt;/h3>&lt;p>كانت لـ MSI و EXE، اللتين استخدمتا كصيغ تثبيت قياسية في Windows لسنوات عديدة، مشاكل جذرية كما يلي:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>ظاهرة Win Rot (تدهور Windows)&lt;/strong>: أثناء تكرار تثبيت وإلغاء تثبيت التطبيقات، تبقى مفاتيح غير ضرورية في السجل، وتُترك ملفات DLL في مجلدات النظام (مثل &lt;code>C:\Windows\System32&lt;/code>). يؤدي هذا إلى إبطاء نظام التشغيل نفسه تدريجياً وحدوث ظاهرة عدم الاستقرار.&lt;/li>
&lt;li>&lt;strong>جحيم DLL (DLL Hell)&lt;/strong>: عندما تحاول تطبيقات متعددة تثبيت ملف DLL يحمل نفس الاسم (ولكن بإصدارات مختلفة) في دليل النظام المشترك، فإن التطبيق المثبت لاحقاً يستبدل ملف DLL الموجود، مما يؤدي إلى توقف التطبيق المثبت مسبقاً عن العمل بشكل صحيح.&lt;/li>
&lt;li>&lt;strong>عدم الاستقرار بسبب الإجراءات المخصصة&lt;/strong>: في حزم MSI، يمكن تنفيذ نصوص أو تعليمات برمجية تعسفية تسمى &amp;ldquo;الإجراءات المخصصة&amp;rdquo; بصلاحيات النظام أثناء التثبيت أو إلغاء التثبيت. تسبب هذا في خطر انهيار المثبت في منتصف العملية أو التسبب في تغييرات غير متوقعة في إعدادات النظام.&lt;/li>
&lt;/ol>
&lt;h3 id="الحل-من-خلال-بنية-الحاويات-في-msix">الحل من خلال بنية الحاويات في MSIX
&lt;/h3>&lt;p>يحل MSIX هذه المشكلات عن طريق تشغيل التطبيق داخل &amp;ldquo;حاوية&amp;rdquo; خفيفة الوزن. يحتوي نهج الحاويات هذا على المزايا الهائلة التالية:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>إلغاء التثبيت النظيف&lt;/strong>: التطبيقات المثبتة عبر MSIX تقوم بالكتابة على نظام الملفات والسجل بشكل افتراضي (VFS: Virtual File System، VReg: Virtual Registry). لذلك، عند إلغاء التثبيت، يتم حذف هذه الحاوية الافتراضية بأكملها، مما لا يترك أي بقايا (قمامة) في النظام. هذا يمنع ظاهرة Win Rot تماماً.&lt;/li>
&lt;li>&lt;strong>العزل والأمان (Isolation)&lt;/strong>: يعمل كل تطبيق داخل بيئته الخاصة ولا يدمر مباشرة ملفات DLL أو الموارد الخاصة بالتطبيقات الأخرى. هذا يحررك من جحيم DLL.&lt;/li>
&lt;li>&lt;strong>تحسين النطاق الترددي للشبكة&lt;/strong>: آلية التحديث في MSIX ممتازة جداً، حيث تدعم التحديثات التفاضلية على مستوى الكتلة (Differential Update). نظراً لأنه يتم تنزيل الكتل القليلة المعدلة فقط من البيانات الثنائية، فإنه يقلل الحمل على الشبكة إلى الحد الأدنى حتى عند تحديث التطبيقات الكبيرة.&lt;/li>
&lt;li>&lt;strong>حالة تثبيت موثوقة&lt;/strong>: تحتوي الحزمة على ملف بيان (&lt;code>AppxManifest.xml&lt;/code>)، وتتم إدارة معاملات التثبيت بدقة على مستوى نظام التشغيل. في حالة الفشل، يتم التراجع تماماً إلى الحالة الأصلية.&lt;/li>
&lt;/ul>
&lt;h2 id="2-النظرة-العامة-على-إنشاء-حزمة-msix-وسلسلة-الأدوات">2. النظرة العامة على إنشاء حزمة MSIX وسلسلة الأدوات
&lt;/h2>&lt;p>هناك طريقتان رئيسيتان لإنشاء حزمة MSIX. الأولى هي استخدام بيئة التطوير المتكاملة (IDE) لـ Visual Studio، والثانية هي الاستفادة من أدوات سطر الأوامر (مثل &lt;code>MakeAppx.exe&lt;/code> و &lt;code>SignTool.exe&lt;/code>) المرفقة مع Windows SDK.&lt;/p>
&lt;p>يوضح مخطط Mermaid التالي العملية منذ ملفات المصدر وحتى إنشاء حزمة MSIX النهائية الموقعة.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;الملفات المصدرية (EXE, DLL, الموارد, إلخ)&amp;#34;] --&amp;gt; B[&amp;#34;AppxManifest.xml (تعريف البيان)&amp;#34;]
B --&amp;gt; C[&amp;#34;MakeAppx.exe (منشئ حزم MSIX)&amp;#34;]
C --&amp;gt; D[&amp;#34;حزمة MSIX غير موقعة (.msix)&amp;#34;]
E[&amp;#34;شهادة رقمية (.pfx)&amp;#34;] --&amp;gt; F[&amp;#34;SignTool.exe (المُوَقِّع الرقمي)&amp;#34;]
D --&amp;gt; F
F --&amp;gt; G[&amp;#34;حزمة MSIX موقعة (جاهزة للنشر)&amp;#34;]
style A fill:#f9f9f9,stroke:#333
style B fill:#e6f7ff,stroke:#333
style D fill:#ffcccb,stroke:#333
style G fill:#d4edda,stroke:#333
&lt;/pre>
&lt;p>كما يتضح من هذه العملية، لا يكفي مجرد جمع الملفات وحزمها، بل يجب المرور بخطوة &amp;ldquo;التوقيع الرقمي&amp;rdquo;. لأسباب أمنية، لا يسمح Windows 11 بتثبيت حزم MSIX غير الموقعة على الإطلاق.&lt;/p>
&lt;h2 id="3-النهج-أ-إنشاء-msix-باستخدام-visual-studio">3. النهج أ: إنشاء MSIX باستخدام Visual Studio
&lt;/h2>&lt;p>الطريقة الأسهل والأكثر شيوعاً هي استخدام &amp;ldquo;مشروع حزم تطبيقات Windows (Windows Application Packaging Project - WAP)&amp;rdquo; في Visual Studio. باستخدام قالب المشروع هذا، يمكنك بسهولة تحزيم تطبيقات WPF، Windows Forms، WinUI 3، وحتى تطبيقات Win32 القديمة المكتوبة بـ C++ إلى MSIX.&lt;/p>
&lt;h3 id="دليل-خطوة-بخطوة">دليل خطوة بخطوة
&lt;/h3>&lt;ol>
&lt;li>&lt;strong>إضافة مشروع WAP&lt;/strong>: انقر بزر الماوس الأيمن على حل (Solution) Visual Studio الحالي، واختر &amp;ldquo;إضافة مشروع جديد&amp;rdquo;، ثم حدد &amp;ldquo;مشروع حزم تطبيقات Windows&amp;rdquo;.&lt;/li>
&lt;li>&lt;strong>اختيار النظام الأساسي المستهدف&lt;/strong>: حدد الإصدار الأدنى والإصدار المستهدف لنظام التشغيل Windows 10/11 الذي يدعمه التطبيق.&lt;/li>
&lt;li>&lt;strong>الإشارة إلى التطبيق&lt;/strong>: انقر بزر الماوس الأيمن على عقدة &amp;ldquo;التطبيقات&amp;rdquo; في مشروع الحزمة، واختر &amp;ldquo;إضافة مرجع&amp;rdquo;، ثم حدد المشروع الرئيسي الذي تريد حزمه (مثل مشروع WPF).&lt;/li>
&lt;li>&lt;strong>إعداد البيان (Manifest)&lt;/strong>: انقر نقراً مزدوجاً فوق ملف &lt;code>Package.appxmanifest&lt;/code> لفتح المصمم المرئي. هنا، قم بتعيين اسم عرض التطبيق، الوصف، صورة الشعار، والأهم من ذلك &amp;ldquo;اسم الحزمة (Identity Name)&amp;rdquo; و&amp;quot;الناشر (Publisher)&amp;quot;.&lt;/li>
&lt;li>&lt;strong>إنشاء الحزمة&lt;/strong>: انقر بزر الماوس الأيمن على المشروع، واختر &amp;ldquo;نشر&amp;rdquo; -&amp;gt; &amp;ldquo;إنشاء حزم التطبيقات&amp;rdquo;. اختر &amp;ldquo;للتحميل الجانبي (Sideloading)&amp;rdquo; وحدد البنية (مثل x64، ARM64)، وسيقوم Visual Studio تلقائياً بالترجمة، الحزم باستخدام &lt;code>MakeAppx&lt;/code>، وحتى إنشاء شهادة توقيع ذاتي والتوقيع عليها.&lt;/li>
&lt;/ol>
&lt;p>هذا سلس للغاية، ولكن إذا استخدمت شهادة التوقيع الذاتي (Test Certificate) التي تم إنشاؤها تلقائياً بواسطة Visual Studio، فستقع في &amp;ldquo;الفخ&amp;rdquo; الموصوف لاحقاً.&lt;/p>
&lt;h2 id="4-النهج-ب-الإنشاء-باستخدام-سطر-الأوامر-makeappxexe">4. النهج ب: الإنشاء باستخدام سطر الأوامر (MakeAppx.exe)
&lt;/h2>&lt;p>لأتمتة العملية في مسار CI/CD، أو لإعادة حزم مجموعة من الملفات يدوياً من مثبت موجود، ستحتاج إلى أدوات سطر الأوامر. إذا كانت بيئة Windows SDK مثبتة، يمكنك الوصول إلى الأدوات التالية من موجه أوامر المطور.&lt;/p>
&lt;h3 id="1-إعداد-ملف-البيان">1. إعداد ملف البيان
&lt;/h3>&lt;p>قم بإنشاء ملف &lt;code>AppxManifest.xml&lt;/code> يحتوي على الحد الأدنى من المعلومات في الدليل الجذر للحزمة.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-xml" data-lang="xml">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;Package&lt;/span> &lt;span class="na">xmlns=&lt;/span>&lt;span class="s">&amp;#34;http://schemas.microsoft.com/appx/manifest/foundation/windows10&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xmlns:uap=&lt;/span>&lt;span class="s">&amp;#34;http://schemas.microsoft.com/appx/manifest/uap/windows10&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xmlns:rescap=&lt;/span>&lt;span class="s">&amp;#34;http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Identity&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;MyCompany.AwesomeApp&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Publisher=&lt;/span>&lt;span class="s">&amp;#34;CN=MyCompany Self-Signed, O=MyCompany&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Version=&lt;/span>&lt;span class="s">&amp;#34;1.0.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">ProcessorArchitecture=&lt;/span>&lt;span class="s">&amp;#34;x64&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;DisplayName&amp;gt;&lt;/span>Awesome App&lt;span class="nt">&amp;lt;/DisplayName&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;PublisherDisplayName&amp;gt;&lt;/span>My Company&lt;span class="nt">&amp;lt;/PublisherDisplayName&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Logo&amp;gt;&lt;/span>Assets\StoreLogo.png&lt;span class="nt">&amp;lt;/Logo&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Properties&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Resources&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Resource&lt;/span> &lt;span class="na">Language=&lt;/span>&lt;span class="s">&amp;#34;en-us&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Resource&lt;/span> &lt;span class="na">Language=&lt;/span>&lt;span class="s">&amp;#34;ja-jp&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Resources&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Dependencies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;TargetDeviceFamily&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;Windows.Desktop&amp;#34;&lt;/span> &lt;span class="na">MinVersion=&lt;/span>&lt;span class="s">&amp;#34;10.0.17763.0&amp;#34;&lt;/span> &lt;span class="na">MaxVersionTested=&lt;/span>&lt;span class="s">&amp;#34;10.0.22000.0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Dependencies&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Capabilities&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;rescap:Capability&lt;/span> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;runFullTrust&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Capabilities&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Applications&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;Application&lt;/span> &lt;span class="na">Id=&lt;/span>&lt;span class="s">&amp;#34;AwesomeApp&amp;#34;&lt;/span> &lt;span class="na">Executable=&lt;/span>&lt;span class="s">&amp;#34;AwesomeApp.exe&amp;#34;&lt;/span> &lt;span class="na">EntryPoint=&lt;/span>&lt;span class="s">&amp;#34;Windows.FullTrustApplication&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;uap:VisualElements&lt;/span> &lt;span class="na">DisplayName=&lt;/span>&lt;span class="s">&amp;#34;Awesome App&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Description=&lt;/span>&lt;span class="s">&amp;#34;The best app ever.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">BackgroundColor=&lt;/span>&lt;span class="s">&amp;#34;transparent&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Square150x150Logo=&lt;/span>&lt;span class="s">&amp;#34;Assets\Square150x150Logo.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Square44x44Logo=&lt;/span>&lt;span class="s">&amp;#34;Assets\Square44x44Logo.png&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/uap:VisualElements&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Application&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/Applications&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;/Package&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>الشيء المهم هنا هو أن قيمة &lt;code>&amp;lt;Identity Publisher=&amp;quot;...&amp;quot; /&amp;gt;&lt;/code> يجب أن تتطابق تماماً مع اسم الكيان (Subject) في الشهادة التي ستُستخدم للتوقيع لاحقاً.&lt;/p>
&lt;h3 id="2-الحزم-باستخدام-makeappx">2. الحزم باستخدام MakeAppx
&lt;/h3>&lt;p>في موجه الأوامر، قم بتشغيل الأمر التالي لضغط الدليل إلى ملف MSIX.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cmd" data-lang="cmd">&lt;span class="line">&lt;span class="cl">MakeAppx.exe pack /d &lt;span class="s2">&amp;#34;C:\Path\To\AppFolder&amp;#34;&lt;/span> /p &lt;span class="s2">&amp;#34;C:\Path\To\Output\AwesomeApp_1.0.0.0_x64.msix&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>هذا يكمل ملف MSIX غير الموقّع، ولكن في هذه الحالة، لا يمكن تثبيته على نظام Windows.&lt;/p>
&lt;h2 id="5-التوقيع-الرقمي-والخلفية-الرياضية-لتكنولوجيا-التشفير">5. التوقيع الرقمي والخلفية الرياضية لتكنولوجيا التشفير
&lt;/h2>&lt;p>لفهم سبب الحاجة إلى التوقيع على حزم MSIX بعمق، من الضروري فهم الآليات التشفيرية وراء التوقيعات الرقمية. يضمن التوقيع الرقمي أن الحزمة &amp;ldquo;تم إنشاؤها بالتأكيد بواسطة الناشر المحدد (المصادقة)&amp;rdquo; وأنها &amp;ldquo;لم يتم العبث بها من قبل طرف ثالث من وقت الإنشاء وحتى الآن (النزاهة)&amp;rdquo;.&lt;/p>
&lt;p>يستخدم التوقيع لـ MSIX عادةً مزيجاً من تشفير RSA و SHA-256 (خوارزمية التجزئة الآمنة 256 بت).&lt;/p>
&lt;h3 id="تطبيق-دالة-التجزئة">تطبيق دالة التجزئة
&lt;/h3>&lt;p>أولاً، لنجعل البيانات الثنائية (المحتويات) لحزمة MSIX بأكملها هي الرسالة $M$. تقوم أداة التوقيع (SignTool.exe) بتطبيق دالة التجزئة التشفيرية SHA-256 على هذه الرسالة $M$ لحساب قيمة تجزئة بطول ثابت (256 بت) $H(M)$.&lt;/p>
&lt;h3 id="إنشاء-التوقيع-الناشر">إنشاء التوقيع (الناشر)
&lt;/h3>&lt;p>بعد ذلك، يستخدم الناشر &amp;ldquo;مفتاحه الخاص (Private Key)&amp;rdquo; $d$ لتشفير قيمة التجزئة، ويولد توقيعاً رقمياً $\sigma$. في سياق خوارزمية RSA، يتم التعبير عن هذا كعملية أسية نموذجية على النحو التالي:&lt;/p>
$$ \sigma \equiv (H(M))^d \pmod n $$&lt;p>حيث $n$ هو معامل RSA (حاصل ضرب عددين أوليين ضخمين). يتم تضمين هذه الشهادة (بصيغة X.509) التي تحتوي على التوقيع $\sigma$ و &amp;ldquo;المفتاح العام (Public Key)&amp;rdquo; $e$ الخاص بالناشر كجزء من حزمة MSIX (في &lt;code>AppxSignature.p7x&lt;/code>).&lt;/p>
&lt;h3 id="التحقق-من-التوقيع-نظام-تشغيل-windows">التحقق من التوقيع (نظام تشغيل Windows)
&lt;/h3>&lt;p>عندما يحاول المستخدم تثبيت MSIX، يستخرج نظام التشغيل Windows المفتاح العام $e$ من الشهادة الموجودة داخل الحزمة، ويقوم بالحساب التالي لاستعادة قيمة التجزئة $H'(M)$.&lt;/p>
$$ H'(M) \equiv \sigma^e \pmod n $$&lt;p>في نفس الوقت، يقوم نظام التشغيل نفسه بإعادة حساب قيمة التجزئة $H(M)$ لحزمة MSIX بأكملها التي تم تنزيلها $M$.
في النهاية، يتحقق مما إذا كانت قيمة التجزئة المستردة وقيمة التجزئة المعاد حسابها متساويتين ($H(M) = H'(M)$). إذا صحت هذه المعادلة، فقد تم إثبات رياضياً أن &amp;ldquo;الملف لم يتم العبث به ولو بت واحدة بعد التوقيع&amp;rdquo;.&lt;/p>
&lt;h2 id="6-العائق-الأكبر-فخ-شهادة-التوقيع-الذاتي">6. العائق الأكبر: &amp;ldquo;فخ شهادة التوقيع الذاتي&amp;rdquo;
&lt;/h2>&lt;p>حتى لو كان الإثبات الرياضي أعلاه مثالياً، فإن Windows 11 لا يسمح بالتثبيت بمجرد ذلك. لأن هناك حاجة للتحقق من &amp;ldquo;سلسلة الثقة (Chain of Trust)&amp;rdquo; لمعرفة: &amp;ldquo;هل صاحب ذلك المفتاح العام (الشهادة) هو حقاً المنظمة أو الشخص الآمن الذي يدعي أنه هو؟&amp;rdquo;&lt;/p>
&lt;p>إذا كانت الشهادة صادرة عن مرجع مصدق جذري عام (Root CA) موثوق به مسبقاً من قبل نظام التشغيل، مثل VeriSign أو DigiCert، فيمكن تثبيته دون مشاكل (التطبيقات الموزعة عبر Microsoft Store موثوق بها بالمثل بواسطة شهادة جذر Microsoft).&lt;/p>
&lt;p>ومع ذلك، إذا لم تتمكن من تحمل تكلفة شراء شهادة عامة، مثل أثناء التطوير أو للأدوات الداخلية للشركة، يقوم المطور بإصدار الشهادة بنفسه. هذه هي &amp;ldquo;شهادة التوقيع الذاتي (Self-Signed Certificate)&amp;rdquo;.&lt;/p>
&lt;p>يوضح مخطط التسلسل التالي سلوك نظام التشغيل عند محاولة تثبيت حزمة MSIX موقعة بشهادة توقيع ذاتي.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;المستخدم (Windows 11)&amp;#34;
participant P as &amp;#34;مثبت تطبيق MSIX&amp;#34;
participant C as &amp;#34;مخزن شهادات Windows&amp;#34;
U-&amp;gt;&amp;gt;P: &amp;#34;نقر مزدوج على ملف .msix&amp;#34;
P-&amp;gt;&amp;gt;P: &amp;#34;قراءة AppxSignature.p7x&amp;#34;
P-&amp;gt;&amp;gt;P: &amp;#34;استخراج التوقيع والشهادة&amp;#34;
P-&amp;gt;&amp;gt;P: &amp;#34;التحقق الرياضي (هل تتطابق التجزئة؟)&amp;#34;
P-&amp;gt;&amp;gt;C: &amp;#34;التحقق من ثقة شهادة الناشر&amp;#34;
alt &amp;#34;الشهادة موجودة في مخزن المراجع المصدقة الجذرية الموثوقة&amp;#34;
C--&amp;gt;&amp;gt;P: &amp;#34;تم التحقق من الثقة بنجاح&amp;#34;
P-&amp;gt;&amp;gt;U: &amp;#34;مطالبة بالتثبيت (زر التثبيت نَشِط)&amp;#34;
U-&amp;gt;&amp;gt;P: &amp;#34;ينقر على تثبيت&amp;#34;
P-&amp;gt;&amp;gt;U: &amp;#34;تم التثبيت بنجاح&amp;#34;
else &amp;#34;الشهادة غير موثوقة (الفخ)&amp;#34;
C--&amp;gt;&amp;gt;P: &amp;#34;فشل التحقق من الثقة (0x800B0109)&amp;#34;
P-&amp;gt;&amp;gt;U: &amp;#34;عرض خطأ: تمت معالجة سلسلة الشهادات، لكنها انتهت في شهادة جذر غير موثوقة&amp;#34;
P-&amp;gt;&amp;gt;U: &amp;#34;زر التثبيت مُعَطَّل&amp;#34;
end
&lt;/pre>
&lt;p>هذا هو بالضبط &amp;ldquo;الفخ&amp;rdquo;. على الرغم من أن المطور قد أنشأها ووقّعها بشكل صحيح، إلا أن نظام Windows 11 في حالته الافتراضية لا يعرف (لا يثق بـ) شهادة التوقيع الذاتي تلك، وبالتالي يتم حظر التثبيت برمز الخطأ &lt;code>0x800B0109&lt;/code>. يتحول زر &amp;ldquo;تثبيت&amp;rdquo; في المثبت إلى اللون الرمادي ولا يمكن الضغط عليه.&lt;/p>
&lt;p>يواجه العديد من المطورين هذا الخطأ، ويقعون في متاهة إعادة كتابة ملف البيان مراراً وتكراراً معتقدين أن &amp;ldquo;MSIX مليء بالأخطاء&amp;rdquo; أو &amp;ldquo;يجب أن يكون الإعداد خاطئاً&amp;rdquo;، ولكن المشكلة لا تكمن في هيكل الحزمة، بل في وجود أو عدم وجود تسجيل في مخزن الشهادات (Certificate Store) لنظام التشغيل.&lt;/p>
&lt;h2 id="7-الحل-إنشاء-ونشر-شهادة-توقيع-ذاتي-باستخدام-powershell">7. الحل: إنشاء ونشر شهادة توقيع ذاتي باستخدام PowerShell
&lt;/h2>&lt;p>لحل هذه المشكلة، من الضروري تنفيذ الخطوتين التاليتين بشكل موثوق.&lt;/p>
&lt;ol>
&lt;li>إنشاء شهادة توقيع ذاتي صالحة، وتصدير ملف PFX الذي يحتوي على المفتاح الخاص.&lt;/li>
&lt;li>تثبيت جزء المفتاح العام (ملف CER) للشهادة التي تم إنشاؤها في مخزن &lt;strong>&amp;ldquo;المراجع المصدقة الجذرية الموثوقة (Trusted Root Certification Authorities)&amp;rdquo; لجميع أجهزة الكمبيوتر المستهدفة&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;p>باستخدام PowerShell، يمكن معالجة ذلك بشكل موثوق وتلقائي.&lt;/p>
&lt;h3 id="الخطوة-1-إنشاء-وتصدير-شهادة-التوقيع-الذاتي">الخطوة 1: إنشاء وتصدير شهادة التوقيع الذاتي
&lt;/h3>&lt;p>أولاً، قم بتشغيل PowerShell بصلاحيات المسؤول (Administrator)، وقم بتنفيذ البرنامج النصي التالي لإنشاء الشهادة. هنا، سنقوم بإنشاء شهادة مخصصة لأغراض توقيع التعليمات البرمجية (Code Signing).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 1. تعريف المعلمات&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$SubjectName&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;CN=MyCompany Self-Signed, O=MyCompany&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$CertStoreLocation&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;Cert:\CurrentUser\My&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 2. إنشاء شهادة توقيع ذاتي (لغرض توقيع التعليمات البرمجية: 1.3.6.1.5.5.7.3.3)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$Cert&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">New-SelfSignedCertificate&lt;/span> &lt;span class="n">-Type&lt;/span> &lt;span class="n">Custom&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">-Subject&lt;/span> &lt;span class="nv">$SubjectName&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">-KeyUsage&lt;/span> &lt;span class="n">DigitalSignature&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">-FriendlyName&lt;/span> &lt;span class="s2">&amp;#34;MyCompany MSIX Signing Cert&amp;#34;&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">-CertStoreLocation&lt;/span> &lt;span class="nv">$CertStoreLocation&lt;/span> &lt;span class="p">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">-TextExtension&lt;/span> &lt;span class="vm">@&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;2.5.29.37={text}1.3.6.1.5.5.7.3.3&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;2.5.29.19={text}&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Write-Host&lt;/span> &lt;span class="s2">&amp;#34;تم إنشاء الشهادة. البصمة (Thumbprint): &lt;/span>&lt;span class="p">$(&lt;/span>&lt;span class="nv">$Cert&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Thumbprint&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 3. إنشاء كلمة مرور لتصدير ملف PFX (متضمن المفتاح الخاص)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$Password&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nb">ConvertTo-SecureString&lt;/span> &lt;span class="n">-String&lt;/span> &lt;span class="s2">&amp;#34;YourSecurePassword123!&amp;#34;&lt;/span> &lt;span class="n">-Force&lt;/span> &lt;span class="n">-AsPlainText&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 4. تصدير ملف PFX (للتوقيع باستخدام SignTool)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$PfxPath&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Output\MyCompanyCert.pfx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Export-PfxCertificate&lt;/span> &lt;span class="n">-Cert&lt;/span> &lt;span class="nv">$Cert&lt;/span> &lt;span class="n">-FilePath&lt;/span> &lt;span class="nv">$PfxPath&lt;/span> &lt;span class="n">-Password&lt;/span> &lt;span class="nv">$Password&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># 5. تصدير CER (المفتاح العام فقط) (للتثبيت على أجهزة العملاء)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$CerPath&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Output\MyCompanyCert.cer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Export-Certificate&lt;/span> &lt;span class="n">-Cert&lt;/span> &lt;span class="nv">$Cert&lt;/span> &lt;span class="n">-FilePath&lt;/span> &lt;span class="nv">$CerPath&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>باستخدام ملف &lt;code>$PfxPath&lt;/code> الذي تم إنشاؤه هنا، قم بالتوقيع على حزمة MSIX.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cmd" data-lang="cmd">&lt;span class="line">&lt;span class="cl">SignTool.exe sign /fd SHA256 /a /f &lt;span class="s2">&amp;#34;C:\Path\To\Output\MyCompanyCert.pfx&amp;#34;&lt;/span> /p &lt;span class="s2">&amp;#34;YourSecurePassword123!&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Output\AwesomeApp_1.0.0.0_x64.msix&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="الخطوة-2-تثبيت-الشهادة-على-جهاز-الكمبيوتر-العميل-إزالة-الفخ">الخطوة 2: تثبيت الشهادة على جهاز الكمبيوتر العميل (إزالة الفخ)
&lt;/h3>&lt;p>إذا أخذت حزمة MSIX الموقعة إلى جهاز كمبيوتر آخر (أو بيئة افتراضية)، ونقرت عليها نقراً مزدوجاً كما هي، فلن تتمكن من تثبيتها كما هو موضح أعلاه. مقدماً (أو في نفس الوقت)، ستحتاج إلى تثبيت ملف &lt;code>$CerPath&lt;/code> الذي تم تصديره للتو في &amp;ldquo;المراجع المصدقة الجذرية الموثوقة&amp;rdquo; لـ &amp;ldquo;الكمبيوتر المحلي (Local Computer)&amp;rdquo;.&lt;/p>
&lt;p>للقيام بذلك، افتح PowerShell &lt;strong>بصلاحيات المسؤول&lt;/strong> على جهاز الكمبيوتر المستهدف للنشر، وقم بتنفيذ الأمر التالي.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># مسار ملف CER&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">$CerPath&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;C:\Path\To\Output\MyCompanyCert.cer&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># استيراد إلى &amp;#34;المراجع المصدقة الجذرية الموثوقة&amp;#34; للكمبيوتر المحلي&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Import-Certificate&lt;/span> &lt;span class="n">-FilePath&lt;/span> &lt;span class="nv">$CerPath&lt;/span> &lt;span class="n">-CertStoreLocation&lt;/span> &lt;span class="s2">&amp;#34;Cert:\LocalMachine\Root&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Write-Host&lt;/span> &lt;span class="s2">&amp;#34;تم تثبيت الشهادة في المراجع المصدقة الجذرية الموثوقة.&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>[!CAUTION]
تعد امتيازات المسؤول مطلوبة لإضافة الشهادة إلى مخزن المراجع المصدقة الجذرية لـ &amp;ldquo;الكمبيوتر المحلي (&lt;code>LocalMachine&lt;/code>)&amp;rdquo;. يجب الحذر لأنه حتى إذا تم إدراجها في المخزن الشخصي للمستخدم (&lt;code>CurrentUser&lt;/code>)، فقد لا يتم التعرف عليها بسبب سياق امتيازات App Installer.&lt;/p>
&lt;/blockquote>
&lt;p>مباشرة بعد نجاح هذا البرنامج النصي، حاول النقر نقراً مزدوجاً فوق ملف MSIX الذي كان يعطي خطأ في وقت سابق مرة أخرى. وكأنه سحر، يجب أن تختفي رسالة الخطأ ويظهر زر &amp;ldquo;تثبيت&amp;rdquo; نشط بلون أزرق ساطع. بهذا تكون قد تخطيت &amp;ldquo;فخ شهادة التوقيع الذاتي&amp;rdquo; بالكامل.&lt;/p>
&lt;h2 id="8-التشغيل-في-بيئة-المؤسسات-وأفضل-الممارسات">8. التشغيل في بيئة المؤسسات وأفضل الممارسات
&lt;/h2>&lt;p>إذا كان ذلك لاختبار محلي للمطور، فإن الخطوات المذكورة أعلاه كافية. ولكن عند نشر تطبيقات محملة جانبياً على عشرات أو مئات من أجهزة الكمبيوتر داخل الشركة، فمن غير العملي ويشكل خطراً أمنياً أن تطلب من كل مستخدم تشغيل برنامج تثبيت الشهادة النصي.&lt;/p>
&lt;p>أفضل الممارسات في بيئة المؤسسات هي كما يلي.&lt;/p>
&lt;h3 id="1-الاستفادة-من-نهج-مجموعة-active-directory-gpo">1. الاستفادة من نهج مجموعة Active Directory (GPO)
&lt;/h3>&lt;p>إذا تم تقديم Active Directory داخل الشركة، يمكنك استخدام &amp;ldquo;نهج المفتاح العام&amp;rdquo; لـ GPO لتوزيع شهادة التوقيع الذاتي (ملف CER) تلقائياً على &amp;ldquo;المراجع المصدقة الجذرية الموثوقة&amp;rdquo; لجميع أجهزة الكمبيوتر المنضمة إلى المجال. هذا يسمح للموظفين بتثبيت التطبيق بمجرد النقر المزدوج على ملف MSIX في مجلد مشترك دون أي وعي بالشهادة.&lt;/p>
&lt;h3 id="2-النشر-عبر-microsoft-intune-mdm">2. النشر عبر Microsoft Intune (MDM)
&lt;/h3>&lt;p>تستخدم البيئات الحديثة Microsoft Intune لإدارة الأجهزة. في Intune، يمكنك دفع شهادة موثوقة (.cer) إلى نقاط النهاية باستخدام ميزة &amp;ldquo;ملف تعريف التكوين (Configuration Profile)&amp;rdquo;. بعد ذلك، يمكنك نشر حزمة MSIX نفسها كتثبيت صامت كتطبيق LOB (Line of Business).&lt;/p>
&lt;h3 id="3-التحديث-التلقائي-من-خلال-ملف-app-installer-appinstaller">3. التحديث التلقائي من خلال ملف App Installer (.appinstaller)
&lt;/h3>&lt;p>يحتوي MSIX على ميزة قوية لأتمتة تحديثات التطبيقات. عن طريق إنشاء ملف &lt;code>.appinstaller&lt;/code> يستند إلى XML ووضعه على خادم ويب أو مجلد SMB مشترك، يمكنك جعل التطبيق يتحقق في الخلفية من وجود إصدارات جديدة من MSIX عند تشغيل التطبيق وتطبيق التحديثات تلقائياً.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-xml" data-lang="xml">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;AppInstaller&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Uri=&lt;/span>&lt;span class="s">&amp;#34;https://internal.mycompany.com/apps/AwesomeApp.appinstaller&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Version=&lt;/span>&lt;span class="s">&amp;#34;1.0.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">xmlns=&lt;/span>&lt;span class="s">&amp;#34;http://schemas.microsoft.com/appx/appinstaller/2018&amp;#34;&lt;/span>&lt;span class="nt">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;MainPackage&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Name=&lt;/span>&lt;span class="s">&amp;#34;MyCompany.AwesomeApp&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Publisher=&lt;/span>&lt;span class="s">&amp;#34;CN=MyCompany Self-Signed, O=MyCompany&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Version=&lt;/span>&lt;span class="s">&amp;#34;1.0.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">ProcessorArchitecture=&lt;/span>&lt;span class="s">&amp;#34;x64&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">Uri=&lt;/span>&lt;span class="s">&amp;#34;https://internal.mycompany.com/apps/AwesomeApp_1.0.0.0_x64.msix&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;UpdateSettings&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;OnLaunch&lt;/span> &lt;span class="na">HoursBetweenUpdateChecks=&lt;/span>&lt;span class="s">&amp;#34;0&amp;#34;&lt;/span> &lt;span class="nt">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;lt;/UpdateSettings&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">&amp;lt;/AppInstaller&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>عن طريق توزيع هذا الملف للمستخدمين لتثبيته، من الآن فصاعداً، بمجرد استبدال ملف MSIX على الخادم وتحديث رقم الإصدار في &lt;code>.appinstaller&lt;/code>، سيتم تحديث تطبيق جميع المستخدمين تلقائياً.&lt;/p>
&lt;h2 id="9-استكشاف-الأخطاء-وإصلاحها-الأخطاء-الشائعة-المتعلقة-بالشهادات">9. استكشاف الأخطاء وإصلاحها: الأخطاء الشائعة المتعلقة بالشهادات
&lt;/h2>&lt;p>أخيراً، سألخص الأخطاء الشائعة الأخرى التي يمكن أن تحدث فيما يتعلق بالشهادات والتوقيعات وحلولها.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>0x800B0101&lt;/strong>: انتهت صلاحية الشهادة المستخدمة للتوقيع. يرجى إصدار شهادة جديدة، أو استخدم خادم طابع زمني عند التوقيع (مثل &lt;code>http://timestamp.digicert.com&lt;/code>) لإثبات أن التوقيع تم ضمن فترة صلاحية الشهادة (بإضافة طابع زمني، سيتم اعتبار التوقيع صالحاً حتى لو انتهت صلاحية الشهادة نفسها).&lt;/li>
&lt;li>&lt;strong>0x80080204&lt;/strong>: قيمة &lt;code>Publisher&lt;/code> المذكورة في &lt;code>AppxManifest.xml&lt;/code> لا تتطابق تماماً مع قيمة &lt;code>Subject&lt;/code> للشهادة. يرجى التحقق بدقة مما إذا كانت تتطابق تماماً كسلسلة نصية، بما في ذلك وجود أو عدم وجود مسافة بعد الفاصلة.&lt;/li>
&lt;li>&lt;strong>التحقق من عارض الأحداث (Event Viewer)&lt;/strong>: للبحث في سبب أكثر تفصيلاً للخطأ، من المهم جداً فتح عارض أحداث Windows والتحقق من السجلات ضمن &amp;ldquo;سجلات التطبيقات والخدمات (Applications and Services Logs)&amp;rdquo; -&amp;gt; &amp;ldquo;Microsoft&amp;rdquo; -&amp;gt; &amp;ldquo;Windows&amp;rdquo; -&amp;gt; &amp;ldquo;AppxPackagingOM&amp;rdquo; أو &amp;ldquo;AppXDeployment-Server&amp;rdquo;.&lt;/li>
&lt;/ul>
&lt;h2 id="10-الخلاصة">10. الخلاصة
&lt;/h2>&lt;p>تعد حزم MSIX لنظام التشغيل Windows 11 تقنية قوية تحسن إدارة دورة حياة التطبيقات بشكل كبير. يمكنك التحرر من Win Rot وجحيم DLL، وتوفير بيئة نظيفة وآمنة للمستخدمين.&lt;/p>
&lt;p>من ناحية أخرى، نظراً لأن نموذج الأمان أصبح أكثر صرامة، فإن الفهم العميق لـ &amp;ldquo;سلسلة الثقة&amp;rdquo; الخاصة بالتوقيعات الرقمية والشهادات أمر بالغ الأهمية. &amp;ldquo;فخ شهادة التوقيع الذاتي&amp;rdquo; هو بوابة مرور يواجهها تقريباً كل مطور يلمس تقنية MSIX لأول مرة. من خلال فهم آلية إنشاء الشهادات، وتصديرها، واستيرادها إلى المخزن المناسب الموضحة في هذه المقالة، والاستفادة من البرامج النصية و GPO للأتمتة، ستتمكن من تحقيق نشر سلس يستخرج أقصى إمكانات MSIX.&lt;/p>
&lt;p>يُرجى الاستفادة من هذه المعرفة لبناء بيئة توزيع تطبيقات Windows نظيفة من الجيل التالي.&lt;/p></description></item></channel></rss>