Att paketera ett CLI-program som MSIX

Den här guiden beskriver hur du paketerar en befintlig körbar kommandorad som ett MSIX-paket för distribution via Windows Správca balíkov (winget), Microsoft Store eller direktdistribution.

Förutsättningar

  • En befintlig CLI-körbar (.exe) som du vill paketera
  • Windows 10 version 1809 eller senare

Instruktioner

1. Organisera ditt CLI-program

Placera den körbara CLI-filen och eventuella beroenden i en dedikerad mapp. Den här mappen innehåller alla filer som ska ingå i MSIX-paketet.

mkdir MyCliPackage
cd MyCliPackage
# Copy your CLI executable and dependencies here

2. Installera winapp CLI

Installera winapp CLI via Windows Správca balíkov eller uppdatera till den senaste versionen om du redan har den:

# Install (or update if already installed)
winget install microsoft.winappcli --source winget

3. Generera filen Package.appxmanifest

Generera en grundläggande Package.appxmanifest och nödvändiga tillgångar för den körbara CLI-filen:

winapp manifest generate --executable .\yourcli.exe

Det här kommandot skapar en Package.appxmanifest fil i den aktuella katalogen med standardvärden som fylls i från den körbara filen.

4. Konfigurera manifestet

Redigera det genererade Package.appxmanifest för att anpassa paketet. Varje delsteg nedan förklarar vad du ska ändra och varför.

4.1 Lägg till nödvändig namnrymd

Lägg till namnområdet uap5 i elementet Package om det inte redan finns där. Detta krävs för körningsaliaset i steg 4.3:

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  ...
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap uap5 rescap">

4.2 Konfigurera programelementet

I elementet <uap:VisualElements> lägger du till AppListEntry="none" för att dölja appen från Start-menyn. CLI-verktyg anropas från terminalen, så de behöver ingen Start-menypost:

<uap:VisualElements
    DisplayName="YourApp"
    Description="My Application"
    BackgroundColor="transparent"
    Square150x150Logo="Assets\Square150x150Logo.png"
    Square44x44Logo="Assets\Square44x44Logo.png"
    AppListEntry="none">
</uap:VisualElements>

4.3 Lägg till körningsaliasutökning

Lägg till ett körningsalias så att användarna kan köra ditt CLI med namn från valfritt terminalfönster. Lägg till detta i elementet <Application> (efter <uap:VisualElements>):

<Extensions>
  <uap5:Extension Category="windows.appExecutionAlias">
    <uap5:AppExecutionAlias>
      <uap5:ExecutionAlias Alias="yourcli.exe" />
    </uap5:AppExecutionAlias>
  </uap5:Extension>
</Extensions>

Ersätt yourcli.exe med önskat kommandonamn för ditt CLI. När en användare har installerat MSIX kan de anropa CLI med det här kommandot.

4.4 Uppdatera programmetadata

Uppdatera följande fält så att de matchar ditt CLI-program.

Viktigt!

Värdet Publisher i manifestet måste matcha utgivaren i ditt signeringscertifikat. Om du genererar ett certifikat senare (steg 5) använder det utgivaren från manifestet. Om du ändrar utgivaren när du har genererat ett certifikat måste du återskapa certifikatet så att det matchar.

  • Identity: Uppdatera Name, Publisher och Version

    <Identity
      Name="YourCompany.YourCLI"
      Publisher="CN=Your Company"
      Version="1.0.0.0" />
    
  • Egenskaper: Uppdatera visningsnamn, visningsnamn för utgivare och beskrivning

    <Properties>
      <DisplayName>Your CLI Tool</DisplayName>
      <PublisherDisplayName>Your Company</PublisherDisplayName>
      <Description>Description of your CLI tool</Description>
      <Logo>Assets\StoreLogo.png</Logo>
    </Properties>
    
  • VisualElements: Uppdatera visningsnamn och tillgångsreferenser

    <uap:VisualElements
      DisplayName="Your CLI Tool"
      Description="Description of your CLI tool"
      BackgroundColor="transparent"
      Square150x150Logo="Assets\Square150x150Logo.png"
      Square44x44Logo="Assets\Square44x44Logo.png">
      <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" />
      <uap:SplashScreen Image="Assets\SplashScreen.png" />
    </uap:VisualElements>
    

Obs! Du bör också lägga till rätt ikontillgångar i en Assets mapp i paketkatalogen. Appen kommer inte att visas i Startmenyn, men ikoner krävs fortfarande för inlämning till Store och kan dyka upp i andra sammanhang.

5. (Valfritt) Generera ett utvecklingscertifikat

För lokal testning och distribution utanför Microsoft Store måste du signera MSIX-paketet med ett certifikat.

Generera ett utvecklingscertifikat. Förvara den utanför CLI-mappen för att undvika att oavsiktligt inkludera den i paketet:

# Navigate to a location outside your CLI folder (e.g., your home directory)
cd ~
winapp cert generate

Då skapas en devcert.pfx fil i din hemkatalog (t.ex. C:\Users\yourname\devcert.pfx).

Om du vill lita på det här certifikatet på utvecklingsdatorn installerar du det (kräver administratörsbehörighet):

# Run PowerShell as Administrator
winapp cert install ~\devcert.pfx

6. Paketera ditt CLI

Nu är du redo att skapa MSIX-paketet:

# Navigate back outside of your project folder
# Package with dev certificate (for local testing/distribution)
winapp pack .\path\to\MyCliPackage --cert .\path\to\devcert.pfx

Då skapas en .msix fil i den aktuella katalogen.

7. Installera och verifiera

Installera MSIX-paketet för att kontrollera att allt fungerar:

Add-AppxPackage .\MyCliPackage.msix

Om du har lagt till ett körningsalias i steg 4.3 kan du nu köra CLI från valfri terminal:

yourcli --help

Så här avinstallerar du senare:

Get-AppxPackage *YourCLI* | Remove-AppxPackage

Tips

  1. När du är redo för distribution kan du signera din MSIX med ett kodsigneringscertifikat från en certifikatutfärdare så att användarna inte behöver installera ett självsignerat certifikat
  2. Microsoft Store signerar MSIX åt dig, du behöver inte signera innan det skickas in.
  3. Du kan behöva skapa flera MSIX-paket, ett för varje arkitektur som du stöder (x64, Arm64)

Nästa steg