اختبار حزم MSIX لإرفاق التطبيق

توضح لك هذه المقالة كيفية تحميل حزم MSIX خارج Azure Virtual Desktop للمساعدة في اختبار الحزم الخاصة بك لإرفاق التطبيق. تتوفر واجهات برمجة التطبيقات التي تقوم بإرفاق تطبيق الطاقة ل Windows 11 Enterprise وWindows 10 Enterprise. يمكن استخدام واجهات برمجة التطبيقات هذه خارج Azure Virtual Desktop للاختبار، ولكن لا توجد وحدة إدارة لإرفاق تطبيق MSIX أو إرفاق التطبيق خارج Azure Virtual Desktop.

لمزيد من المعلومات حول إرفاق تطبيق MSIX وإرفاق التطبيق، راجع إرفاق تطبيق MSIX وإرفاق التطبيق في Azure Virtual Desktop.

المتطلبات الأساسية

قبل أن تتمكن من اختبار حزمة لاتباع الإرشادات الواردة في هذه المقالة، تحتاج إلى الأشياء التالية:

لا تحتاج إلى توزيع Azure Virtual Desktop لأن هذه المقالة تصف عملية للاختبار خارج Azure Virtual Desktop.

إشعار

لا يدعم دعم Microsoft وحدة CimDiskImage PowerShell، لذلك إذا واجهت أي مشاكل، فستحتاج إلى إرسال طلب على مستودع GitHub الخاص بالوحدة النمطية.

مراحل

لاستخدام حزم MSIX خارج Azure Virtual Desktop، هناك أربع مراحل مميزة يجب تنفيذها بالترتيب التالي:

  1. مرحلة
  2. تسجيل
  3. إلغاء التسجيل
  4. تخفيض رتبة البيانات

التقسيم المرحلي والترحيل هما عمليات على مستوى الجهاز، بينما التسجيل وإلغاء التسجيل هما عمليات على مستوى المستخدم. تختلف الأوامر التي تحتاج إلى استخدامها استنادا إلى إصدار PowerShell الذي تستخدمه وما إذا كانت صور القرص بتنسيق CimFS أو VHDX أو VHD .

إشعار

تتضمن جميع حزم MSIX شهادة. أنت مسؤول عن التأكد من أن شهادات حزم MSIX موثوق بها في بيئتك.

الاستعداد لإعداد حزمة MSIX

يقوم البرنامج النصي المرحلي بإعداد جهازك لتلقي حزمة MSIX ويحمل الحزمة ذات الصلة إلى جهازك.

حدد علامة التبويب ذات الصلة لإصدار PowerShell الذي تستخدمه.

لإعداد الحزم باستخدام PowerShell 6 أو أحدث، تحتاج إلى تشغيل الأوامر التالية قبل عمليات التقسيم المرحلي لإحضار قدرات حزمة وقت تشغيل Windows إلى PowerShell.

  1. افتح مطالبة PowerShell كمسؤول.

  2. قم بتشغيل الأمر التالي لتنزيل حزمة وقت تشغيل Windows وتثبيتها. تحتاج فقط إلى تشغيل الأوامر التالية مرة واحدة لكل جهاز.

    #Required for PowerShell 6 and later
    $nuGetPackageName = 'Microsoft.Windows.SDK.NET.Ref'
    Register-PackageSource -Name MyNuGet -Location https://www.nuget.org/api/v2 -ProviderName NuGet
    Find-Package $nuGetPackageName | Install-Package
    
  3. بعد ذلك، قم بتشغيل الأمر التالي لجعل مكونات وقت تشغيل Windows متوفرة في PowerShell:

    #Required for PowerShell 6 and later
    $nuGetPackageName = 'Microsoft.Windows.SDK.NET.Ref'
    $winRT = Get-Package $nuGetPackageName
    $dllWinRT = Get-ChildItem (Split-Path -Parent $winRT.Source) -Recurse -File WinRT.Runtime.dll
    $dllSdkNet = Get-ChildItem (Split-Path -Parent $winRT.Source) -Recurse -File Microsoft.Windows.SDK.NET.dll
    Add-Type -AssemblyName $dllWinRT.FullName
    Add-Type -AssemblyName $dllSdkNet.FullName
    

تنظيم حزمة MSIX

الآن بعد أن أعددت جهازك لإعداد حزم MSIX، تحتاج إلى تحميل صورة القرص، ثم إنهاء التقسيم المرحلي لحزمة MSIX.

تحميل صورة قرص

تختلف عملية تحميل صورة القرص استنادا إلى ما إذا كنت تستخدم تنسيق CimFs أو VHDX أو VHD لصورة القرص. حدد علامة التبويب ذات الصلة للتنسيق الذي تستخدمه.

لتحميل صورة قرص CimFS:

  1. في نفس جلسة عمل PowerShell، قم بتشغيل الأمر التالي:

    $diskImage = "<Local or UNC path to the disk image>"
    
    $mount = Mount-CimDiskImage -ImagePath $diskImage -PassThru -NoMountPath
    
    #We can now get the Device Id for the mounted volume, this will be useful for the destage step.
    $deviceId = $mount.DeviceId
    Write-Output $deviceId
    
  2. احتفظ بالمتغير $deviceId. تحتاج إلى هذه المعلومات لاحقا في هذه المقالة.

  3. عند الانتهاء، تابع إلى إنهاء التقسيم المرحلي لصورة القرص.

إنهاء التقسيم المرحلي لصورة القرص

وأخيرا، تحتاج إلى تشغيل الأوامر التالية لكافة تنسيقات الصور لإكمال التقسيم المرحلي لصورة القرص. يستخدم هذا الأمر المتغير الذي $deviceId قمت بإنشائه عند تحميل صورة القرص في القسم السابق.

  1. في نفس جلسة عمل PowerShell، قم باسترداد معلومات التطبيق عن طريق تشغيل الأوامر التالية:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. احصل على الاسم الكامل لحزمة MSIX وقم بتخزينها في متغير عن طريق تشغيل الأوامر التالية. هذا المتغير مطلوب للخطوات اللاحقة.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. إنشاء URI مطلق لمجلد البيان لواجهة برمجة تطبيقات مدير الحِزَم عن طريق تشغيل الأوامر التالية:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. استخدم URI المطلق لتنظيم حزمة التطبيق عن طريق تشغيل الأوامر التالية:

    $asTask = ([System.WindowsRuntimeSystemExtensions].GetMethods() | Where-Object { $_.ToString() -eq 'System.Threading.Tasks.Task`1[TResult] AsTask[TResult,TProgress](Windows.Foundation.IAsyncOperationWithProgress`2[TResult,TProgress])' })[0]
    $asTaskAsyncOperation = $asTask.MakeGenericMethod([Windows.Management.Deployment.DeploymentResult], [Windows.Management.Deployment.DeploymentProgress])
    
    $packageManager = New-Object -TypeName Windows.Management.Deployment.PackageManager
    
    $asyncOperation = $packageManager.StagePackageAsync($folderAbsoluteUri, $null, "StageInPlace")
    
  5. مراقبة التقدم المرحلي لحزمة التطبيق عن طريق تشغيل الأوامر التالية. يعتمد الوقت الذي يستغرقه تنظيم الحزمة على حجمها. Status ستكون RanToCompletion خاصية $stagingResult المتغير عند اكتمال التقسيم المرحلي.

    $stagingResult = $asTaskAsyncOperation.Invoke($null, @($asyncOperation))
    
    while ($stagingResult.Status -eq "WaitingForActivation") {
        Write-Output "Waiting for activation..."
        Start-Sleep -Seconds 5
    }
    
    Write-Output $stagingResult
    

بمجرد تنظيم حزمة MSI الخاصة بك، يمكنك تسجيل حزمة MSIX الخاصة بك.

تسجيل حزمة MSIX

لتسجيل حزمة MSIX، قم بتشغيل الأوامر التالية في نفس جلسة عمل PowerShell. يستخدم هذا الأمر المتغير الذي $msixPackageFullName تم إنشاؤه في قسم سابق.

$manifestPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') (Join-Path $msixPackageFullName AppxManifest.xml)
Add-AppxPackage -Path $manifestPath -DisableDevelopmentMode -Register

الآن بعد أن تم تسجيل حزمة MSIX الخاصة بك، يجب أن يكون التطبيق الخاص بك متاحا للاستخدام في جلسة العمل الخاصة بك. يمكنك الآن فتح التطبيق للاختبار واستكشاف الأخطاء وإصلاحها. بمجرد الانتهاء، تحتاج إلى إلغاء تسجيل حزمة MSIX واستيعابها.

إلغاء تسجيل حزمة MSIX

بمجرد الانتهاء من حزمة MSIX الخاصة بك وتكون جاهزا لإزالتها، تحتاج أولا إلى إلغاء تسجيلها. لإزالة تسجيل حزمة MSIX، قم بتشغيل الأوامر التالية في نفس جلسة عمل PowerShell. تحصل هذه الأوامر على معلمة القرص DeviceId مرة أخرى، وتزيل الحزمة باستخدام المتغير الذي $msixPackageFullName تم إنشاؤه في قسم سابق.

$appPath = Join-Path (Join-Path $Env:ProgramFiles 'WindowsApps') $msixPackageFullName
$folderInfo = Get-Item $appPath
$deviceId = '\\?\' + $folderInfo.Target.Split('\')[0] +'\'
Write-Output $deviceId #Save this for later

Remove-AppxPackage $msixPackageFullName -PreserveRoamableApplicationData

استيعاب حزمة MSIX

وأخيرا، لاستخراج حزمة MSIX، تحتاج إلى إلغاء تحميل صورة القرص، وتشغيل الأمر التالي في نفس جلسة عمل PowerShell للتأكد من أن الحزمة لا تزال مسجلة لأي مستخدم. يستخدم هذا الأمر المتغير الذي $msixPackageFullName تم إنشاؤه في قسم سابق.

Remove-AppxPackage -AllUsers -Package $msixPackageFullName -ErrorAction SilentlyContinue

إلغاء تحميل صورة الأقراص

لإنهاء عملية الترحيل، تحتاج إلى إلغاء تحميل الأقراص من النظام. يعتمد الأمر الذي تحتاج إلى استخدامه على تنسيق صورة القرص. حدد علامة التبويب ذات الصلة للتنسيق الذي تستخدمه.

لإزالة صورة قرص CimFS، قم بتشغيل الأوامر التالية في نفس جلسة عمل PowerShell:

Dismount-CimDiskImage -DeviceId $deviceId

بمجرد الانتهاء من إلغاء تحميل الأقراص الخاصة بك، قمت بإزالة حزمة MSIX بأمان.

إعداد البرامج النصية للمحاكاة لعامل إرفاق تطبيق MSIX

إذا كنت تريد إضافة حزم MSIX وإزالتها إلى جهازك تلقائيا، يمكنك استخدام أوامر PowerShell في هذه المقالة لإنشاء البرامج النصية التي تعمل عند بدء التشغيل وتسجيل الدخول وتسجيل الخروج وإيقاف التشغيل. لمعرفة المزيد، راجع استخدام البرامج النصية لبدء التشغيل وإيقاف التشغيل وتسجيل الدخول وتسجيل الخروج في نهج المجموعة. تحتاج إلى التأكد من توفر أي متغيرات مطلوبة لكل مرحلة في كل برنامج نصي.

يمكنك إنشاء برنامج نصي لكل مرحلة:

  • يقوم البرنامج النصي لبدء التشغيل بتشغيل عملية المرحلة.
  • يقوم البرنامج النصي لتسجيل الدخول بتشغيل عملية التسجيل .
  • يقوم البرنامج النصي لتسجيل الخروج بتشغيل عملية إلغاء التسجيل .
  • يقوم البرنامج النصي لإيقاف التشغيل بتشغيل عملية destage .

إشعار

يمكنك استخدام مجدول المهام لتشغيل البرنامج النصي للمرحلة. لتشغيل البرنامج النصي، قم بتعيين مشغل المهمة إلى عند بدء تشغيل الكمبيوتر وتمكين تشغيل بأعلى الامتيازات.

استخدام الحزم دون اتصال

إذا كنت تستخدم حزما من Microsoft Store للأعمال أو Microsoft Store للتعليم على الأجهزة غير المتصلة بالإنترنت، فستحتاج إلى الحصول على تراخيص الحزمة من Microsoft Store وتثبيتها على جهازك لتشغيل التطبيق بنجاح. إذا كان جهازك متصلا بالإنترنت ويمكنه الاتصال Microsoft Store للأعمال، فيجب تنزيل التراخيص المطلوبة تلقائيا، ولكن إذا كنت غير متصل، فستحتاج إلى إعداد التراخيص يدويا.

لتثبيت ملفات الترخيص، تحتاج إلى استخدام برنامج نصي PowerShell يستدعي MDM_EnterpriseModernAppManagement_StoreLicenses02_01 الفئة في موفر جسر WMI.

فيما يلي كيفية إعداد ترخيص للاستخدام دون اتصال بالإنترنت:

  1. قم بتنزيل حزمة التطبيق والترخيص وأطر العمل المطلوبة من Microsoft Store للأعمال. ستحتاج إلى ملفات الترخيص المشفرة وغير المشفرة. لمعرفة كيفية تنزيل تطبيق مرخص دون اتصال، راجع توزيع التطبيقات غير المتصلة.

  2. قم بتشغيل أوامر PowerShell التالية كمسؤول. يمكنك تثبيت الترخيص في نهاية مرحلة التقسيم المرحلي. تحتاج إلى تحرير المتغيرات التالية:

    • $contentID هي قيمة ContentID من ملف الترخيص غير المشفرة (.xml). يمكنك فتح ملف الترخيص في محرر نص من اختيارك.

    • $licenseBlob هي السلسلة بأكملها لكائن ثنائي كبير الحجم للترخيص في ملف الترخيص المشفرة (.bin). يمكنك فتح ملف الترخيص المشفر في محرر نص من اختيارك.

      $namespaceName = "root\cimv2\mdm\dmmap"
      $className = "MDM_EnterpriseModernAppManagement_StoreLicenses02_01"
      $methodName = "AddLicenseMethod"
      $parentID = "./Vendor/MSFT/EnterpriseModernAppManagement/AppLicenses/StoreLicenses"
      
      #Update $contentID with the ContentID value from the unencoded license file (.xml)
      $contentID = "{'ContentID'_in_unencoded_license_file}"
      
      #Update $licenseBlob with the entire String in the encoded license file (.bin)
      $licenseBlob = "{Entire_String_in_encoded_license_file}"
      
      $session = New-CimSession
      
      #The final string passed into the AddLicenseMethod should be of the form <License Content="encoded license blob" />
      $licenseString = '<License Content='+ '"' + $licenseBlob +'"' + ' />'
      
      $params = New-Object Microsoft.Management.Infrastructure.CimMethodParametersCollection
      $param = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("param",$licenseString ,"String", "In")
      $params.Add($param)
      
      try
      {
           $instance = New-CimInstance -Namespace $namespaceName -ClassName $className -Property @{ParentID=$parentID;InstanceID=$contentID}
           $session.InvokeMethod($namespaceName, $instance, $methodName, $params)
      }
      catch [Exception]
      {
           Write-Host $_ | Out-String
      }
      

البرامج النصية للعرض التوضيحي

يمكنك العثور على البرامج النصية التوضيحية لجميع المراحل الأربع لاختبار حزم MSIX ومساعدة بناء الجملة لكيفية استخدامها في مستودع GitHub الخاص بنا. تعمل هذه البرامج النصية مع أي إصدار من PowerShell وأي تنسيق صورة قرص.

الخطوات التالية

تعرف على المزيد حول إرفاق تطبيق MSIX وإرفاق التطبيق في Azure Virtual Desktop: