اختبار حزم MSIX لإرفاق التطبيق
توضح لك هذه المقالة كيفية تحميل حزم MSIX خارج Azure Virtual Desktop للمساعدة في اختبار الحزم الخاصة بك لإرفاق التطبيق. تتوفر واجهات برمجة التطبيقات التي تقوم بإرفاق تطبيق الطاقة ل Windows 11 Enterprise وWindows 10 Enterprise. يمكن استخدام واجهات برمجة التطبيقات هذه خارج Azure Virtual Desktop للاختبار، ولكن لا توجد وحدة إدارة لإرفاق التطبيق أو إرفاق تطبيق MSIX خارج Azure Virtual Desktop.
لمزيد من المعلومات حول إرفاق التطبيق وإرفاق تطبيقات MSIX، راجع إرفاق التطبيق وإرفاق تطبيق MSIX في Azure Virtual Desktop.
المتطلبات الأساسية
قبل أن تتمكن من اختبار حزمة لاتباع الإرشادات الواردة في هذه المقالة، تحتاج إلى الأشياء التالية:
جهاز يعمل بنظام التشغيل Windows 11 Enterprise أو Windows 10 Enterprise.
تطبيق قمت بتوسيعه من تنسيق MSIX إلى صورة يمكنك استخدامها مع إرفاق التطبيق. تعرف على كيفية إنشاء صورة MSIX لاستخدامها مع إرفاق التطبيق في Azure Virtual Desktop.
إذا كنت تستخدم صورة CimFS، فستحتاج إلى تثبيت وحدة CimDiskImage PowerShell.
حساب مستخدم لديه إذن المسؤول المحلي على الجهاز الذي تستخدمه لاختبار حزمة MSIX.
لا تحتاج إلى توزيع Azure Virtual Desktop لأن هذه المقالة تصف عملية للاختبار خارج Azure Virtual Desktop.
إشعار
لا يدعم دعم Microsoft وحدة CimDiskImage PowerShell، لذلك إذا واجهت أي مشاكل، فستحتاج إلى إرسال طلب على مستودع GitHub الخاص بالوحدة النمطية.
اطوار
لاستخدام حزم MSIX خارج Azure Virtual Desktop، هناك أربع مراحل مميزة يجب تنفيذها بالترتيب التالي:
- مرحلة
- تسجيل
- إلغاء التسجيل
- تخفيض رتبة البيانات
التقسيم المرحلي والترحيل هما عمليات على مستوى الجهاز، بينما التسجيل وإلغاء التسجيل هما عمليات على مستوى المستخدم. تختلف الأوامر التي تحتاج إلى استخدامها استنادا إلى إصدار PowerShell الذي تستخدمه وما إذا كانت صور القرص بتنسيق CimFS أو VHDX أو VHD .
إشعار
تتضمن جميع حزم MSIX شهادة. أنت مسؤول عن التأكد من أن شهادات حزم MSIX موثوق بها في بيئتك.
الاستعداد لإعداد حزمة MSIX
يقوم البرنامج النصي المرحلي بإعداد جهازك لتلقي حزمة MSIX ويحمل الحزمة ذات الصلة إلى جهازك.
حدد علامة التبويب ذات الصلة لإصدار PowerShell الذي تستخدمه.
لإعداد الحزم باستخدام PowerShell 6 أو أحدث، تحتاج إلى تشغيل الأوامر التالية قبل عمليات التقسيم المرحلي لإحضار قدرات حزمة وقت تشغيل Windows إلى PowerShell.
افتح مطالبة PowerShell كمسؤول.
قم بتشغيل الأمر التالي لتنزيل حزمة وقت تشغيل 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
بعد ذلك، قم بتشغيل الأمر التالي لجعل مكونات وقت تشغيل 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:
في نفس جلسة عمل 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
احتفظ بالمتغير
$deviceId
. تحتاج إلى هذه المعلومات لاحقا في هذه المقالة.عند الانتهاء، تابع إلى إنهاء التقسيم المرحلي لصورة القرص.
إنهاء التقسيم المرحلي لصورة القرص
وأخيرا، تحتاج إلى تشغيل الأوامر التالية لكافة تنسيقات الصور لإكمال التقسيم المرحلي لصورة القرص. يستخدم هذا الأمر المتغير الذي $deviceId
قمت بإنشائه عند تحميل صورة القرص في القسم السابق.
في نفس جلسة عمل PowerShell، قم باسترداد معلومات التطبيق عن طريق تشغيل الأوامر التالية:
$manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml $manifestFolder = $manifest.DirectoryName
احصل على الاسم الكامل لحزمة MSIX وقم بتخزينها في متغير عن طريق تشغيل الأوامر التالية. هذا المتغير مطلوب للخطوات اللاحقة.
$msixPackageFullName = $manifestFolder.Split('\')[-1] Write-Output $msixPackageFullName
إنشاء URI مطلق لمجلد البيان لواجهة برمجة تطبيقات مدير الحِزَم عن طريق تشغيل الأوامر التالية:
$folderUri = $maniFestFolder.Replace('\\?\','file:\\\') $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
استخدم 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")
مراقبة التقدم المرحلي لحزمة التطبيق عن طريق تشغيل الأوامر التالية. يعتمد الوقت الذي يستغرقه تنظيم الحزمة على حجمها.
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 .
إشعار
يمكنك استخدام مجدول المهام لتشغيل البرنامج النصي للمرحلة. لتشغيل البرنامج النصي، قم بتعيين مشغل المهمة إلى عند بدء تشغيل الكمبيوتر وتمكين تشغيل بأعلى الامتيازات.
استخدام الحزم دون اتصال
إذا كنت تستخدم حزما على أجهزة غير متصلة بالإنترنت، فستحتاج إلى التأكد من تثبيت تراخيص الحزمة على جهازك لتشغيل التطبيق بنجاح. إذا كان جهازك متصلا بالإنترنت، فيجب تنزيل التراخيص المطلوبة تلقائيا.
لتثبيت ملفات الترخيص، تحتاج إلى استخدام برنامج نصي PowerShell يستدعي MDM_EnterpriseModernAppManagement_StoreLicenses02_01
الفئة في موفر جسر WMI.
فيما يلي كيفية إعداد ترخيص للاستخدام دون اتصال بالإنترنت:
قم بتنزيل حزمة التطبيق والترخيص وأطر العمل المطلوبة من Microsoft Store للأعمال. ستحتاج إلى ملفات الترخيص المشفرة وغير المشفرة. لمعرفة كيفية تنزيل تطبيق مرخص دون اتصال، راجع توزيع التطبيقات غير المتصلة.
قم بتشغيل أوامر 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: