Megosztás a következőn keresztül:


MSIX-csomagok tesztelése appcsatlakoztatáshoz

Ez a cikk bemutatja, hogyan csatlakoztathat MSIX-csomagokat az Azure Virtual Desktopon kívül, hogy segítsen tesztelni a csomagokat az alkalmazás csatolásához. A Power App által csatolt API-k Windows 11 Nagyvállalati verzió és Windows 10 Enterprise rendszerhez érhetők el. Ezek az API-k az Azure Virtual Desktopon kívül is használhatók teszteléshez, de nincs felügyeleti sík alkalmazás csatolásához vagy MSIX-alkalmazás csatolásához az Azure Virtual Desktopon kívül.

Az alkalmazás csatolásáról és az MSIX-alkalmazás csatolásáról további információt az Alkalmazás csatolása és az MSIX-alkalmazás csatolása az Azure Virtual Desktopban című témakörben talál.

Előfeltételek

Mielőtt tesztelhet egy csomagot, hogy kövesse a cikkben szereplő utasításokat, a következő dolgokra van szüksége:

Nincs szükség Azure Virtual Desktop-telepítésre, mert ez a cikk az Azure Virtual Desktopon kívüli tesztelés folyamatát ismerteti.

Feljegyzés

Microsoft ügyfélszolgálata nem támogatja a CimDiskImage PowerShell-modult, ezért ha bármilyen problémába ütközik, be kell küldenie egy kérést a modul GitHub-adattárába.

Fázisok

Az Azure Virtual Desktopon kívüli MSIX-csomagok használatához négy különböző fázist kell végrehajtania a következő sorrendben:

  1. Szakasz
  2. Regisztráció
  3. Regisztráció törlése
  4. Destage

Az előkészítés és az előkészítés gépszintű műveletek, míg a regisztráció és a regisztráció törlése felhasználói szintű műveletek. A használni kívánt parancsok a PowerShell használt verziójától és a lemezképek CimFS, VHDX vagy VHD formátumától függően változnak.

Feljegyzés

Minden MSIX-csomag tartalmaz egy tanúsítványt. Önnek kell gondoskodnia arról, hogy az MSIX-csomagok tanúsítványai megbízhatóak legyenek a környezetben.

Előkészítés MSIX-csomag előkészítésére

Az előkészítési szkript előkészíti a gépet az MSIX-csomag fogadására, és csatlakoztatja a megfelelő csomagot a géphez.

Válassza ki a használt PowerShell-verzió megfelelő lapját.

A csomagok PowerShell 6-os vagy újabb verziójával történő szakaszolásához az előkészítési műveletek előtt az alábbi parancsokat kell futtatnia, hogy a Windows-futtatókörnyezet csomag képességeit a PowerShellbe hozza.

  1. Nyisson meg egy PowerShell-kérést rendszergazdaként.

  2. Futtassa a következő parancsot a Windows-futtatókörnyezet csomag letöltéséhez és telepítéséhez. Gépenként csak egyszer kell futtatnia a következő parancsokat.

    #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. Ezután futtassa a következő parancsot a Windows-futtatókörnyezet-összetevők elérhetővé tétele a PowerShellben:

    #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-csomag előkészítése

Most, hogy előkészítette a gépet az MSIX-csomagok előkészítésére, csatlakoztatnia kell a lemezképet, majd be kell fejeznie az MSIX-csomag előkészítését.

Lemezkép csatlakoztatása

A lemezképek csatlakoztatásának folyamata attól függően változik, hogy a lemezkép CimFs, VHDX vagy VHD formátumát használja-e. Válassza ki a használt formátum megfelelő lapját.

CimFS-lemezkép csatlakoztatása:

  1. Ugyanabban a PowerShell-munkamenetben futtassa a következő parancsot:

    $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. Tartsa meg a változót $deviceId. A cikk későbbi részében szüksége lesz ezekre az információkra.

  3. Ha elkészült, folytassa a lemezképek előkészítési folyamatának befejezésével.

Lemezkép előkészítésének befejezése

Végül az alábbi parancsokat kell futtatnia az összes képformátumhoz a lemezkép előkészítési folyamatának befejezéséhez. Ez a parancs az $deviceId előző szakaszban a lemezkép csatlakoztatásakor létrehozott változót használja.

  1. Ugyanabban a PowerShell-munkamenetben kérje le az alkalmazás adatait az alábbi parancsok futtatásával:

    $manifest = Get-ChildItem -LiteralPath $deviceId -Recurse -File AppxManifest.xml
    $manifestFolder = $manifest.DirectoryName
    
  2. Kérje le az MSIX-csomag teljes nevét, és tárolja egy változóban az alábbi parancsok futtatásával. Ez a változó a későbbi lépésekhez szükséges.

    $msixPackageFullName = $manifestFolder.Split('\')[-1]
    Write-Output $msixPackageFullName
    
  3. Az alábbi parancsok futtatásával hozzon létre egy abszolút URI-t a Csomagkezelő API jegyzékmappája számára:

    $folderUri = $maniFestFolder.Replace('\\?\','file:\\\')
    $folderAbsoluteUri = ([Uri]$folderUri).AbsoluteUri
    
  4. Az abszolút URI használatával az alkalmazáscsomagot az alábbi parancsok futtatásával rendezheti:

    $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. Az alábbi parancsok futtatásával monitorozza az alkalmazáscsomag átmeneti állapotát. A csomag előkészítési ideje a méretétől függ. A Status változó tulajdonsága $stagingResult akkor lesz RanToCompletion , ha az előkészítés befejeződött.

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

Miután előkészítette az MSI-csomagot, regisztrálhatja az MSIX-csomagot.

MSIX-csomag regisztrálása

MSIX-csomag regisztrálásához futtassa az alábbi parancsokat ugyanabban a PowerShell-munkamenetben. Ez a parancs az $msixPackageFullName előző szakaszban létrehozott változót használja.

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

Most, hogy az MSIX-csomag regisztrálva lett, az alkalmazásnak elérhetőnek kell lennie a munkamenetben való használatra. Most már megnyithatja az alkalmazást teszteléshez és hibaelhárításhoz. Ha végzett, törölje az MSIX-csomag regisztrációját és destage-ját.

MSIX-csomag regisztrációja törlése

Ha végzett az MSIX-csomaggal, és készen áll az eltávolítására, először törölnie kell azt. Az MSIX-csomag regisztrációjának törléséhez futtassa az alábbi parancsokat ugyanabban a PowerShell-munkamenetben. Ezek a parancsok ismét lekérik a lemez paraméterét DeviceId , és eltávolítják a csomagot az $msixPackageFullName előző szakaszban létrehozott változóval.

$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-csomag destage

Végül az MSIX-csomag leválasztásához le kell bontania a lemezképet, futtassa a következő parancsot ugyanabban a PowerShell-munkamenetben, hogy a csomag még ne legyen regisztrálva egyetlen felhasználónál sem. Ez a parancs az $msixPackageFullName előző szakaszban létrehozott változót használja.

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

Lemezkép leválasztása

Az előkészítési folyamat befejezéséhez le kell választania a lemezeket a rendszerből. A használni kívánt parancs a lemezkép formátumától függ. Válassza ki a használt formátum megfelelő lapját.

CimFS-lemezkép leválasztásához futtassa a következő parancsokat ugyanabban a PowerShell-munkamenetben:

Dismount-CimDiskImage -DeviceId $deviceId

Miután befejezte a lemezek leválasztását, biztonságosan eltávolította az MSIX-csomagot.

Szimulációs szkriptek beállítása az MSIX-alkalmazás csatolási ügynökéhez

Ha automatikusan szeretne MSIX-csomagokat hozzáadni és eltávolítani az eszközre, a cikkben szereplő PowerShell-parancsokkal indításkor, bejelentkezéskor, kijelentkezéskor és leállításkor futó szkripteket hozhat létre. További információ: Indítási, leállítási, bejelentkezési és emblémázási szkriptek használata a csoportházirendben. Győződjön meg arról, hogy az egyes fázisokhoz szükséges változók minden szkriptben elérhetők.

Minden fázishoz létre kell hoznia egy szkriptet:

  • Az indítási szkript futtatja a fázisfolyamatot .
  • A bejelentkezési szkript futtatja a regisztrációs folyamatot.
  • A kijelentkezés szkriptje futtatja a regisztráció törlését .
  • A leállítási szkript futtatja a destage folyamatot.

Feljegyzés

A feladatütemezővel futtathatja a szakaszszkriptet. A szkript futtatásához állítsa a feladat-eseményindítót a számítógép indításakor , és engedélyezze a futtatás a legmagasabb jogosultságokkal.

Csomagok offline használata

Ha olyan eszközökön használ csomagokat, amelyek nem csatlakoznak az internethez, győződjön meg arról, hogy a csomaglicencek telepítve vannak az eszközön az alkalmazás sikeres futtatásához. Ha az eszköz online állapotban van, a szükséges licenceket automatikusan le kell tölteni.

A licencfájlok telepítéséhez egy PowerShell-szkriptet kell használnia, amely meghívja az osztályt MDM_EnterpriseModernAppManagement_StoreLicenses02_01 a WMI-hídszolgáltatóban.

Az alábbiak szerint állíthat be licencet offline használatra:

  1. Töltse le az alkalmazáscsomagot, a licencet és a szükséges keretrendszereket a Microsoft Store Vállalatoknak. Szüksége van a kódolt és a kódolatlan licencfájlokra is. Az offline licenccel rendelkező alkalmazások letöltéséről az offline alkalmazások terjesztése című témakörben olvashat.

  2. Futtassa a következő PowerShell-parancsokat rendszergazdaként. Telepítheti a licencet az előkészítési fázis végén. A következő változókat kell szerkesztenie:

    • $contentID A kódolatlan licencfájl.xml () ContentID-értéke. A licencfájlt egy tetszőleges szövegszerkesztőben nyithatja meg.

    • $licenseBlob A kódolt licencfájl.bin () licencblob teljes sztringje. A kódolt licencfájlt megnyithatja egy tetszőleges szövegszerkesztőben.

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

Bemutató szkriptek

Az MSIX-csomagok tesztelésének mind a négy szakaszához talál bemutató szkripteket, és szintaxist is találhat a GitHub-adattárban való használatukhoz. Ezek a szkriptek a PowerShell bármely verziójával és bármilyen lemezképformátummal működnek.

Következő lépések

További információ az alkalmazás csatolásáról és az MSIX-alkalmazás csatolásáról az Azure Virtual Desktopban: