Udostępnij przez


Uruchamianie skryptów za pomocą struktury obsługi pakietów

Skrypty umożliwiają specjalistom IT dynamiczne dostosowywanie aplikacji do środowiska użytkownika po jej spakowaniu przy użyciu MSIX. Na przykład możesz użyć skryptów do skonfigurowania bazy danych, skonfigurowania sieci VPN, zainstalowania dysku udostępnionego lub dynamicznego sprawdzenia licencji. Skrypty zapewniają dużą elastyczność. Mogą zmieniać klucze rejestru lub wykonywać modyfikacje plików na podstawie konfiguracji komputera lub serwera.

Możesz użyć programu Package Support Framework (PSF), aby uruchomić jeden skrypt programu PowerShell przed uruchomieniem spakowanego pliku wykonywalnego aplikacji i jednym skryptem programu PowerShell po uruchomieniu pliku wykonywalnego aplikacji w celu wyczyszczenia. Każdy plik wykonywalny aplikacji zdefiniowany w manifeście aplikacji może mieć własne skrypty. Skrypt można skonfigurować tak, aby był uruchamiany tylko raz w pierwszym uruchomieniu aplikacji i bez wyświetlania okna programu PowerShell, dzięki czemu użytkownicy nie zakończą skryptu przedwcześnie przez pomyłkę. Istnieją inne opcje konfigurowania sposobu uruchamiania skryptów, jak pokazano poniżej.

Wymagania wstępne

Aby umożliwić uruchamianie skryptów, należy ustawić zasady wykonywania programu PowerShell na RemoteSigned. Możesz to zrobić, uruchamiając następujące polecenie:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Zasady wykonywania należy ustawić zarówno dla 64-bitowego pliku wykonywalnego programu PowerShell, jak i 32-bitowego pliku wykonywalnego programu PowerShell. Pamiętaj, aby otworzyć każdą wersję programu PowerShell i uruchomić jedno z wymienionych powyżej poleceń.

Oto lokalizacje każdego pliku wykonywalnego.

  • Komputer 64-bitowy:
    • 64-bitowy plik wykonywalny: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
    • 32-bitowy plik wykonywalny: %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
  • Komputer 32-bitowy:
    • 32-bitowy plik wykonywalny: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

Aby uzyskać więcej informacji na temat zasad wykonywania programu PowerShell, zobacz ten artykuł.

🚩 Pamiętaj również, aby uwzględnić plik StartingScriptWrapper.ps1 w pakiecie i umieścić go w tym samym folderze co plik wykonywalny. Możesz skopiować ten plik z pakietu NuGet psF lub repozytorium GitHub PSF.

Włączanie skryptów

Aby określić, jakie skrypty będą uruchamiane dla każdego spakowanego pliku wykonywalnego aplikacji, należy zmodyfikować plikconfig.json. Aby poinformować program PSF o uruchomieniu skryptu przed wykonaniem spakowanej aplikacji, dodaj element konfiguracji o nazwie startScript. Aby poinformować psF o uruchomieniu skryptu po zakończeniu spakowanej aplikacji, dodaj element konfiguracji o nazwie endScript.

Elementy konfiguracji skryptu

Poniżej przedstawiono elementy konfiguracji dostępne dla skryptów. Skrypt końcowy ignoruje elementy konfiguracji waitForScriptToFinish i stopOnScriptError.

Nazwa klucza Typ wartości Wymagane? Wartość domyślna Opis
scriptPath sznurek Tak N/A Ścieżka do skryptu, w tym nazwa i rozszerzenie. Ścieżka jest względna względem katalogu roboczego aplikacji, jeśli jest określony; w przeciwnym razie rozpoczyna się od katalogu głównego pakietu.
scriptArguments sznurek Nie. pusty Lista argumentów rozdzielonych spacjami. Format jest taki sam w przypadku wywołania skryptu programu PowerShell. Ten ciąg jest dołączany do scriptPath, aby wykonać prawidłowe wywołanie PowerShell.exe.
runInVirtualEnvironment typ logiczny (boolowski) Nie. prawda Określa, czy skrypt powinien działać w tym samym środowisku wirtualnym, w których działa spakowana aplikacja.
runOnce typ logiczny (boolowski) Nie. prawda Określa, czy skrypt powinien być uruchamiany raz dla użytkownika, na wersję.
showWindow typ logiczny (boolowski) Nie. fałszywy Określa, czy jest wyświetlane okno programu PowerShell.
stopOnScriptError typ logiczny (boolowski) Nie. fałszywy Określa, czy zakończyć działanie aplikacji, jeśli skrypt uruchamiania zakończy się niepowodzeniem.
waitForScriptToFinish typ logiczny (boolowski) Nie. prawda Określa, czy spakowana aplikacja powinna czekać na zakończenie uruchamiania skryptu przed rozpoczęciem.
timeout DWORD (Protokół DWORD) Nie. NIESKOŃCZONY Jak długo skrypt będzie mógł się wykonywać. Po upływie czasu skrypt zostanie zatrzymany.

Uwaga / Notatka

Ustawienie stopOnScriptError: true i waitForScriptToFinish: false dla przykładowej aplikacji nie jest obsługiwane. Jeśli ustawisz oba te elementy konfiguracji, program PSF zwróci błąd ERROR_BAD_CONFIGURATION.

Przykładowa konfiguracja

Oto przykładowa konfiguracja używająca dwóch różnych plików wykonywalnych aplikacji.

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