Menguji paket MSIX untuk lampiran aplikasi

Artikel ini memperlihatkan kepada Anda cara memasang paket MSIX di luar Azure Virtual Desktop untuk membantu menguji paket Anda untuk lampiran aplikasi. API yang memasang aplikasi daya tersedia untuk Windows 11 Enterprise dan Windows 10 Enterprise. API ini dapat digunakan di luar Azure Virtual Desktop untuk pengujian, namun tidak ada sarana manajemen untuk lampiran aplikasi MSIX atau lampiran aplikasi di luar Azure Virtual Desktop.

Untuk informasi selengkapnya tentang lampiran aplikasi MSIX dan lampiran aplikasi, lihat MSIX app attach dan app attach di Azure Virtual Desktop.

Prasyarat

Sebelum Anda dapat menguji paket untuk mengikuti petunjuk dalam artikel ini, Anda memerlukan hal-hal berikut:

  • Perangkat yang menjalankan Windows 11 Enterprise atau Windows 10 Enterprise.

  • Aplikasi yang Anda perluas dari format MSIX ke dalam gambar yang dapat Anda gunakan dengan lampiran aplikasi. Pelajari cara Membuat gambar MSIX untuk digunakan dengan lampiran aplikasi di Azure Virtual Desktop.

  • Jika Anda menggunakan citra CimFS, Anda perlu menginstal modul CimDiskImage PowerShell.

  • Akun pengguna yang memiliki izin administrator lokal pada perangkat yang Anda gunakan untuk menguji paket MSIX.

Anda tidak memerlukan penyebaran Azure Virtual Desktop karena artikel ini menjelaskan proses pengujian di luar Azure Virtual Desktop.

Catatan

Dukungan Microsoft tidak mendukung modul CimDiskImage PowerShell, jadi jika Anda mengalami masalah, Anda harus mengirimkan permintaan pada repositori GitHub modul.

Fase

Untuk menggunakan paket MSIX di luar Azure Virtual Desktop, ada empat fase berbeda yang harus Anda lakukan dalam urutan berikut:

  1. Tahap
  2. Daftar
  3. Batalkan pendaftaran
  4. Destage

Penahapan dan pentahapan adalah operasi tingkat mesin, sementara mendaftar dan membatalkan pendaftaran adalah operasi tingkat pengguna. Perintah yang perlu Anda gunakan bervariasi berdasarkan versi PowerShell mana yang Anda gunakan dan apakah gambar disk Anda dalam format CimFS, VHDX , atau VHD .

Catatan

Semua paket MSIX menyertakan sertifikat. Anda bertanggung jawab untuk memastikan sertifikat untuk paket MSIX dipercaya di lingkungan Anda.

Bersiap untuk menahapkan paket MSIX

Skrip penahapan menyiapkan komputer Anda untuk menerima paket MSIX dan memasang paket yang relevan ke komputer Anda.

Pilih tab yang relevan untuk versi PowerShell yang Anda gunakan.

Untuk menahapkan paket menggunakan PowerShell 6 atau yang lebih baru, Anda perlu menjalankan perintah berikut sebelum operasi penahapan untuk membawa kemampuan paket Windows Runtime ke PowerShell.

  1. Buka perintah PowerShell sebagai administrator.

  2. Jalankan perintah berikut untuk mengunduh dan menginstal Paket Runtime Windows. Anda hanya perlu menjalankan perintah berikut sekali per komputer.

    #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. Selanjutnya, jalankan perintah berikut untuk membuat komponen Windows Runtime tersedia di 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
    

Menahapkan paket MSIX

Sekarang setelah Anda menyiapkan komputer Anda untuk mentahapkan paket MSIX, Anda perlu memasang gambar disk Anda, lalu menyelesaikan penahapan paket MSIX Anda.

Memasang citra disk

Proses untuk memasang citra disk bervariasi tergantung pada apakah Anda menggunakan format CimFs, VHDX, atau VHD untuk gambar disk Anda. Pilih tab yang relevan untuk format yang Anda gunakan.

Untuk memasang citra disk CimFS:

  1. Dalam sesi PowerShell yang sama, jalankan perintah berikut:

    $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. Pertahankan variabel $deviceId. Anda memerlukan informasi ini nanti di artikel ini.

  3. Setelah selesai, lanjutkan ke Selesai pentahapan gambar disk.

Menyelesaikan penahapan gambar disk

Terakhir, Anda perlu menjalankan perintah berikut untuk semua format gambar untuk menyelesaikan penahapan gambar disk. Perintah ini menggunakan variabel yang $deviceId Anda buat saat memasang gambar disk di bagian sebelumnya.

  1. Dalam sesi PowerShell yang sama, ambil informasi aplikasi dengan menjalankan perintah berikut:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Dapatkan nama lengkap paket MSIX dan simpan dalam variabel dengan menjalankan perintah berikut. Variabel ini diperlukan untuk langkah-langkah selanjutnya.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Buat URI absolut untuk folder manifes untuk PACKAGE Manager API dengan menjalankan perintah berikut:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Gunakan URI absolut untuk menahapkan paket aplikasi dengan menjalankan perintah berikut:

    $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. Pantau kemajuan penahapan untuk paket aplikasi dengan menjalankan perintah berikut. Waktu yang diperlukan untuk menahapkan paket tergantung pada ukurannya. Properti Status$stagingResult variabel akan menjadi RanToCompletion ketika penahapan selesai.

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

Setelah paket MSI Anda ditahapkan, Anda dapat mendaftarkan paket MSIX Anda.

Mendaftarkan paket MSIX

Untuk mendaftarkan paket MSIX, jalankan perintah berikut dalam sesi PowerShell yang sama. Perintah ini menggunakan variabel yang $msixPackageFullName dibuat di bagian sebelumnya.

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

Sekarang setelah paket MSIX Anda terdaftar, aplikasi Anda harus tersedia untuk digunakan dalam sesi Anda. Anda sekarang dapat membuka aplikasi untuk pengujian dan pemecahan masalah. Setelah selesai, Anda perlu membatalkan pendaftaran dan menyimpang paket MSIX Anda.

Membatalkan pendaftaran paket MSIX

Setelah selesai dengan paket MSIX Anda dan siap untuk menghapusnya, pertama-tama Anda perlu membatalkan pendaftarannya. Untuk membatalkan pendaftaran paket MSIX, jalankan perintah berikut dalam sesi PowerShell yang sama. Perintah ini mendapatkan parameter disk DeviceId lagi, dan menghapus paket menggunakan variabel yang $msixPackageFullName dibuat di bagian sebelumnya.

$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

Destage paket MSIX

Terakhir, untuk menonaktifkan paket MSIX, Anda perlu melepas gambar disk Anda, jalankan perintah berikut dalam sesi PowerShell yang sama untuk memastikan bahwa paket belum terdaftar untuk pengguna mana pun. Perintah ini menggunakan variabel yang $msixPackageFullName dibuat di bagian sebelumnya.

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

Melepas citra disk

Untuk menyelesaikan proses destaging, Anda perlu melepas disk dari sistem. Perintah yang perlu Anda gunakan tergantung pada format gambar disk Anda. Pilih tab yang relevan untuk format yang Anda gunakan.

Untuk melepas citra disk CimFS, jalankan perintah berikut dalam sesi PowerShell yang sama:

Dismount-CimDiskImage -DeviceId $deviceId

Setelah selesai melepas disk, Anda telah menghapus paket MSIX dengan aman.

Menyiapkan skrip simulasi untuk agen yang melampirkan aplikasi MSIX

Jika Anda ingin menambahkan dan menghapus paket MSIX ke perangkat Anda secara otomatis, Anda dapat menggunakan perintah PowerShell dalam artikel ini untuk membuat skrip yang berjalan saat startup, masuk, keluar, dan matikan. Untuk mempelajari selengkapnya, lihat Menggunakan skrip startup, shutdown, log masuk, dan logoff di Kebijakan Grup. Anda perlu memastikan bahwa variabel apa pun yang diperlukan untuk setiap fase tersedia di setiap skrip.

Anda membuat skrip untuk setiap fase:

  • Skrip startup menjalankan proses tahap .
  • Skrip masuk menjalankan proses register .
  • Skrip logoff menjalankan proses deregister .
  • Skrip matikan menjalankan proses destage .

Catatan

Anda dapat menggunakan penjadwal tugas untuk menjalankan skrip tahap. Untuk menjalankan skrip, atur pemicu tugas ke Saat komputer dimulai dan aktifkan Jalankan dengan hak istimewa tertinggi.

Gunakan paket secara offline

Jika Anda menggunakan paket dari Microsoft Store untuk Bisnis atau Microsoft Store untuk Pendidikan di perangkat yang tidak terhubung ke internet, Anda perlu mendapatkan lisensi paket dari Microsoft Store dan menginstalnya di perangkat Anda agar berhasil menjalankan aplikasi. Jika perangkat Anda online dan dapat terhubung ke Microsoft Store untuk Bisnis, lisensi yang diperlukan harus diunduh secara otomatis, tetapi jika Anda offline, Anda perlu menyiapkan lisensi secara manual.

Untuk menginstal file lisensi, Anda perlu menggunakan skrip PowerShell yang memanggil MDM_EnterpriseModernAppManagement_StoreLicenses02_01 kelas di Penyedia Jembatan WMI.

Berikut cara menyiapkan lisensi untuk penggunaan offline:

  1. Unduh paket aplikasi, lisensi, dan kerangka kerja yang diperlukan dari Microsoft Store untuk Bisnis. Anda memerlukan file lisensi yang dikodekan dan tidak dikodekan. Untuk mempelajari cara mengunduh aplikasi berlisensi offline, lihat Mendistribusikan aplikasi offline.

  2. Jalankan perintah PowerShell berikut sebagai administrator. Anda dapat menginstal lisensi berada di akhir fase penahapan. Anda perlu mengedit variabel berikut:

    • $contentID adalah nilai ContentID dari file lisensi yang tidak dikodekan (.xml). Anda dapat membuka file lisensi di editor teks pilihan Anda.

    • $licenseBlob adalah seluruh string untuk blob lisensi dalam file lisensi yang Dikodekan (.bin). Anda dapat membuka file lisensi yang dikodekan di editor teks pilihan Anda.

      $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
      }
      

Skrip demonstrasi

Anda dapat menemukan skrip demonstrasi untuk keempat tahap pengujian paket MSIX dan bantuan sintaks untuk cara menggunakannya di repositori GitHub kami. Skrip ini berfungsi dengan versi PowerShell apa pun dan format gambar disk apa pun.

Langkah berikutnya

Pelajari selengkapnya tentang lampiran aplikasi MSIX dan lampiran aplikasi di Azure Virtual Desktop: