Ausführen von Skripts mit dem Framework zur Paketunterstützung

Skripts ermöglichen IT-Spezialisten, eine Anwendung dynamisch an die Umgebung des Benutzers anzupassen, nachdem sie mit MSIX verpackt wurde. Sie können beispielsweise Skripts verwenden, um Ihre Datenbank zu konfigurieren, ein VPN einzurichten, ein freigegebenes Laufwerk zu bereitstellen oder dynamisch eine Lizenzüberprüfung durchzuführen. Skripts bieten viel Flexibilität. Sie können Registrierungsschlüssel ändern oder Dateiänderungen basierend auf der Computer- oder Serverkonfiguration ausführen.

Sie können das Package Support Framework (PSF) verwenden, um ein PowerShell-Skript auszuführen, bevor eine ausführbare Anwendung ausgeführt wird, und ein PowerShell-Skript, nachdem die ausführbare Anwendung ausgeführt wird, um zu bereinigen. Jede im Anwendungsmanifest definierte Anwendungsdatei kann über eigene Skripts verfügen. Sie können das Skript so konfigurieren, dass das Skript nur einmal auf dem ersten App-Start ausgeführt wird, ohne das PowerShell-Fenster anzuzeigen, damit Benutzer das Skript nicht versehentlich beenden. Es gibt weitere Optionen zum Konfigurieren der Art und Weise, wie Skripts ausgeführt werden können, wie unten dargestellt.

Voraussetzungen

Damit Skripts ausgeführt werden können, müssen Sie die PowerShell-Ausführungsrichtlinie auf RemoteSignedfestlegen. Sie können dies tun, indem Sie diesen Befehl ausführen:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Die Ausführungsrichtlinie muss sowohl für die ausführbare 64-Bit-PowerShell als auch für die ausführbare 32-Bit-PowerShell-Datei festgelegt werden. Stellen Sie sicher, dass Sie jede Version von PowerShell öffnen und einen der oben gezeigten Befehle ausführen.

Hier sind die Speicherorte jeder ausführbaren Datei.

  • 64-Bit-Computer:
    • 64-Bit-ausführbare Datei: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • 32-Bit-ausführbare Datei: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 32-Bit-Computer:
    • 32-Bit-ausführbare Datei: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Weitere Informationen zu PowerShell-Ausführungsrichtlinien finden Sie in diesem Artikel.

🚩 Stellen Sie sicher, dass Sie auch die StartingScriptWrapper.ps1 Datei in Ihr Paket einschließen und sie in denselben Ordner wie Ihre ausführbare Datei platzieren. Sie können diese Datei aus dem PSF NuGet-Paket oder aus dem PSF GitHub-Repo kopieren.

Aktivieren von Skripts

Um anzugeben, welche Skripts für jede ausführbare Anwendung ausgeführt werden sollen, müssen Sie die Datei config.json ändern. Um PSF vor der Ausführung der gepackten Anwendung ein Skript auszuführen, fügen Sie ein Konfigurationselement hinzu, das aufgerufen wird startScript. Um PSF mitzuteilen, dass ein Skript ausgeführt wird, nachdem die verpackte Anwendung abgeschlossen ist, fügen Sie ein Konfigurationselement namens endScripthinzu.

Skriptkonfigurationselemente

Nachfolgend sind die Konfigurationselemente aufgeführt, die für die Skripts verfügbar sind. Das endende Skript ignoriert die waitForScriptToFinish und stopOnScriptError Konfigurationselemente.

Schlüsselname Werttyp Erforderlich? Standard BESCHREIBUNG
scriptPath Zeichenfolge Ja Der Pfad zum Skript, einschließlich des Namens und der Erweiterung. Der Pfad ist relativ zum Arbeitsverzeichnis der Anwendung, sofern angegeben, andernfalls wird er im Stammverzeichnis des Pakets gestartet.
scriptArguments Zeichenfolge Nein empty Leerzeichentrennzeichen-Argumentliste. Das Format ist für einen PowerShell-Skriptaufruf identisch. Diese Zeichenfolge wird angefügt scriptPath , um einen gültigen PowerShell.exe Aufruf vorzunehmen.
runInVirtualEnvironment boolean Nein true Gibt an, ob das Skript in derselben virtuellen Umgebung ausgeführt werden soll, in der die verpackte Anwendung ausgeführt wird.
runOnce boolean Nein true Gibt an, ob das Skript einmal pro Benutzer ausgeführt werden soll, pro Version.
showWindow boolean Nein false Gibt an, ob das PowerShell-Fenster angezeigt wird.
stopOnScriptError boolean Nein false Gibt an, ob die Anwendung beendet werden soll, wenn das Startskript fehlschlägt.
waitForScriptToFinish boolean Nein true Gibt an, ob die verpackte Anwendung warten soll, bis das Startskript abgeschlossen ist, bevor es gestartet wird.
timeout DWORD Nein INFINITE Wie lange das Skript ausgeführt werden darf. Wenn die Zeit verstrichen ist, wird das Skript beendet.

Hinweis

Einstellung stopOnScriptError: true und waitForScriptToFinish: false für die Beispielanwendung wird nicht unterstützt. Wenn Sie beide dieser Konfigurationselemente festlegen, gibt PSF den Fehler ERROR_BAD_CONFIGURATION zurück.

Beispielkonfiguration

Hier ist eine Beispielkonfiguration mit zwei verschiedenen ausführbaren Anwendungsdateien.

{
  "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)
  ]
}