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 gepackt wurde. Beispielsweise können Sie Skripts verwenden, um Ihre Datenbank zu konfigurieren, ein VPN einzurichten, ein freigegebenes Laufwerk einbinden oder eine Lizenzprüfung dynamisch durchzuführen. Skripts bieten viel Flexibilität. Sie können Registrierungsschlüssel ändern oder Dateiänderungen basierend auf der Computer- oder Serverkonfiguration durchführen.

Sie können das Package Support Framework (PSF) verwenden, um ein PowerShell-Skript auszuführen, bevor eine ausführbare Datei einer gepackten Anwendung ausgeführt wird, und ein PowerShell-Skript, nachdem die ausführbare Datei der Anwendung ausgeführt wurde, um die Bereinigung durchzuführen. Jede ausführbare Anwendung, die im Anwendungsmanifest definiert ist, kann über eigene Skripts verfügen. Sie können das Skript so konfigurieren, dass es nur einmal beim ersten App-Start und ohne Anzeige des PowerShell-Fensters ausgeführt wird, damit Benutzer das Skript nicht versehentlich vorzeitig beenden. Es gibt weitere Optionen zum Konfigurieren der Art und Weise, wie Skripts ausgeführt werden können(siehe unten).

Voraussetzungen

Damit Skripts ausgeführt werden können, müssen Sie die PowerShell-Ausführungsrichtlinie auf RemoteSigned festlegen. Führen Sie hierzu den folgenden Befehl aus:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Die Ausführungsrichtlinie muss sowohl für die ausführbare 64-Bit-PowerShell-Datei 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 der einzelnen ausführbaren Dateien.

  • 64-Bit-Computer:
    • Ausführbare 64-Bit-Datei: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • Ausführbare 32-Bit-Datei: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • 32-Bit-Computer:
    • Ausführbare 32-Bit-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 im selben Ordner wie Ihre ausführbare Datei ablegen. Sie können diese Datei aus dem PSF-NuGet-Paket oder aus dem PSF-GitHub-Repositorykopieren.

Aktivieren von Skripts

Um anzugeben, welche Skripts für jede ausführbare Datei der gepackten Anwendung ausgeführt werden, müssen Sie die config.jsin der Dateiändern. Fügen Sie ein Konfigurationselement namens hinzu, um PSF an weisen, vor der Ausführung der gepackten Anwendung ein Skript startScript auszuführen. Fügen Sie ein Konfigurationselement namens hinzu, um PSF anzugeben, ein Skript auszuführen, nachdem die gepackte Anwendung abgeschlossen endScript ist.

Skriptkonfigurationselemente

Im Folgenden finden Sie die Konfigurationselemente, die für die Skripts verfügbar sind. Das Endskript ignoriert die waitForScriptToFinish Konfigurationselemente und stopOnScriptError .

Schlüsselname Werttyp Erforderlich? Standard Beschreibung
scriptPath Zeichenfolge Ja Der Pfad zum Skript einschließlich Name und Erweiterung. Der Pfad ist relativ zum Arbeitsverzeichnis der Anwendung, sofern angegeben, andernfalls wird er im Stammverzeichnis des Pakets gestartet.
scriptArguments Zeichenfolge Nein empty Durch Leerzeichen getrennte Argumentliste. Das Format ist für einen PowerShell-Skriptaufruf identisch. Diese Zeichenfolge wird an scriptPath angefügt, 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 gepackte Anwendung ausgeführt wird.
runOnce boolean Nein true Gibt an, ob das Skript einmal pro Benutzer und pro Version ausgeführt werden soll.
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 gepackte Anwendung warten soll, bis das Startskript abgeschlossen ist, bevor sie gestartet wird.
timeout DWORD Nein INFINITE Wie lange das Skript ausgeführt werden darf. Nach Ablauf der Zeit wird das Skript beendet.

Hinweis

Das Festlegen stopOnScriptError: true von und für die waitForScriptToFinish: false Beispielanwendung wird nicht unterstützt. Wenn Sie beide 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)
  ]
}