Dela via


Köra skript med Package Support Framework

Skript gör det möjligt för IT-proffs att anpassa ett program dynamiskt till användarens miljö när det har paketerats med HJÄLP av MSIX. Du kan till exempel använda skript för att konfigurera databasen, konfigurera ett VPN, montera en delad enhet eller utföra en licenskontroll dynamiskt. Skript ger stor flexibilitet. De kan ändra registernycklar eller utföra filändringar baserat på datorn eller serverkonfigurationen.

Du kan använda Package Support Framework (PSF) för att köra ett PowerShell-skript innan ett paketerat körbart program körs och ett PowerShell-skript efter att programmets körbara körningar har körts för att rensa. Varje körbar app som definieras i programmanifestet kan ha egna skript. Du kan konfigurera skriptet så att det bara körs en gång vid den första appstarten och utan att visa PowerShell-fönstret så att användarna inte avslutar skriptet i förtid av misstag. Det finns andra alternativ för att konfigurera hur skript kan köras, som visas nedan.

Förutsättningar

Om du vill aktivera skript som ska köras måste du ange PowerShell-körningsprincipen till RemoteSigned. Du kan göra detta genom att köra det här kommandot:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Exekveringsprincipen måste anges för både den 64-bitars och 32-bitars PowerShell-programmet. Öppna varje version av PowerShell och kör ett av kommandona som visas ovan.

Här är platserna för varje körbar fil.

  • 64-bitars dator:
    • 64-bitars körbar fil: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • 32-bitars exekverbar fil: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 32-bitars dator:
    • 32-bitars körbar fil: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Mer information om PowerShell-körningsprinciper finns i den här artikeln.

🚩 Se till att även inkludera filenStartingScriptWrapper.ps1 i paketet och placera den i samma mapp som den körbara filen. Du kan kopiera den här filen från PSF NuGet-paketet eller från PSF Github-lagringsplatsen.

Aktivera skript

Om du vill ange vilka skript som ska köras för varje körbart paketerat program måste du ändra config.json-filen. Om du vill uppmana PSF att köra ett skript innan det paketerade programmet körs lägger du till ett konfigurationsobjekt med namnet startScript. Om du vill be PSF att köra ett skript när det paketerade programmet har slutförts lägger du till ett konfigurationsobjekt med namnet endScript.

Konfigurationsobjekt för skript

Följande är de konfigurationsobjekt som är tillgängliga för skripten. Det avslutande skriptet ignorerar konfigurationsobjekten waitForScriptToFinish och stopOnScriptError .

Nyckelnamn Värdetyp Krävs? Förinställning Beskrivning
scriptPath snöre Ja Inte tillgänglig Sökvägen till skriptet, inklusive namn och tillägg. Sökvägen är relativ till programmets arbetskatalog om den anges, annars börjar den i rotkatalogen för paketet.
scriptArguments snöre Nej tom Blankstegsavgränsad argumentlista. Formatet är detsamma för ett PowerShell-skriptanrop. Den här strängen läggs till scriptPath för att göra ett giltigt PowerShell.exe-anrop.
runInVirtualEnvironment booleskt Nej sann Anger om skriptet ska köras i samma virtuella miljö som det paketerade programmet körs i.
runOnce booleskt Nej sann Anger om skriptet ska köras en gång per användare och version.
showWindow booleskt Nej falskt Anger om PowerShell-fönstret visas.
stopOnScriptError booleskt Nej falskt Anger om programmet ska avslutas om startskriptet misslyckas.
waitForScriptToFinish booleskt Nej sann Anger om det paketerade programmet ska vänta tills startskriptet har slutförts innan det startas.
timeout DWORD Nej OÄNDLIG Hur länge skriptet ska tillåtas att köras. När tiden går stoppas skriptet.

Anmärkning

Inställning stopOnScriptError: true och waitForScriptToFinish: false för exempelprogrammet stöds inte. Om du anger båda dessa konfigurationsobjekt returnerar PSF felet ERROR_BAD_CONFIGURATION.

Exempelkonfiguration

Här är en exempelkonfiguration med två olika körbara program.

{
  "applications": [
    {
      "id": "Sample",
      "executable": "Sample.exe",
      "workingDirectory": "",
      "stopOnScriptError": false,
      "startScript":
      {
        "scriptPath": "RunMePlease.ps1",
        "scriptArguments": "\\\"First argument\\\" secondArgument",
        "runInVirtualEnvironment": true,
        "showWindow": true,
        "waitForScriptToFinish": false
      },
      "endScript":
      {
        "scriptPath": "RunMeAfter.ps1",
        "scriptArguments": "ThisIsMe.txt"
      }
    },
    {
      "id": "CPPSample",
      "executable": "CPPSample.exe",
      "workingDirectory": "",
      "startScript":
      {
        "scriptPath": "CPPStart.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runInVirtualEnvironment": true
      },
      "endScript":
      {
        "scriptPath": "CPPEnd.ps1",
        "scriptArguments": "ThisIsMe.txt",
        "runOnce": false
      }
    }
  ],
  "processes": [
    ...(taken out for brevity)
  ]
}