Installieren einer Desktop-App in Bereitstellungspaketen mithilfe eines Skripts

In dieser exemplarischen Vorgehensweise wird beschrieben, wie Skripts in ein Windows-Clientbereitstellungspaket zum Installieren von Win32-Anwendungen eingeschlossen werden. Andere Skriptvorgänge als das Installieren von Apps können ebenfalls ausgeführt werden. Es ist jedoch etwas Vorsicht geboten, um unbeabsichtigtes Verhalten während der Skriptausführung zu vermeiden (siehe Hinweise unten).

Zusammenstellen der Anwendungsressourcen

  1. Platzieren Sie auf dem Gerät, auf dem Sie das Paket erstellen, alle Ihre Ressourcen an einem bekannten Speicherort. Jede Ressource muss einen eindeutigen Dateinamen besitzen, da alle Dateien in das gleiche temporäre Verzeichnis auf dem Gerät kopiert werden. Es ist üblich, dass viele Apps über ein Installationsprogramm namens "install.exe" oder ähnliches verfügen, und es kann daher zu Namensüberschneidungen kommen. Um dieses Problem zu beheben, können Sie die im nächsten Schritt beschriebenen Techniken verwenden, um eine vollständige Verzeichnisstruktur einzuschließen, die in das temporäre Verzeichnis auf dem Gerät übertragen wird. Am häufigsten würde für jede Anwendung ein Unterverzeichnis erstellt werden.

  2. Wenn Sie eine Verzeichnisstruktur von Dateien einschließen müssen, müssen Sie die Ressourcen für eine einfache Einbindung in die Bereitstellungspakete verwalten.

Erstellen einer CAB-Datei für die Anwendungsressourcen

  1. Erstellen Sie eine .DDF Datei wie unten, ersetzen Sie file1 und file2 durch die Dateien, die Sie packen möchten, und fügen Sie den Namen der Datei/des Verzeichnisses hinzu.

    ;*** MSDN Sample Source Code MakeCAB Directive file example
    ;
    .OPTION EXPLICIT  ; Generate errors on variable typos
    .set DiskDirectoryTemplate=CDROM  ; All cabinets go in a single directory
    .Set MaxDiskFileCount=1000; Limit file count per cabinet, so that
    ; scanning is not too slow
    .Set FolderSizeThreshold=200000   ; Aim for ~200K per folder
    .Set CompressionType=MSZIP
    ;** All files are compressed in cabinet files
    .Set Cabinet=on
    .Set Compress=on
    ;-------------------------------------------------------------------
    ;** CabinetNameTemplate = name of cab
    ;** DiskDirectory1 = output directory where cab will be created
    ;-------------------------------------------------------------------
    .Set CabinetNameTemplate=tt.cab
    .Set DiskDirectory1=.
    ;-------------------------------------------------------------------
    ; Replace <file> with actual files you want to package
    ;-------------------------------------------------------------------
    <file1>
    <file2>
    ;*** <the end>
    
  2. Verwenden Sie makecab, um die CAB-Dateien zu erstellen.

    Makecab -f <path to DDF file>
    

Erstellen Sie das Skript, um die Anwendung zu installieren.

Erstellen Sie ein Skript, um die für die Installation der Anwendung(en) erforderlichen Aufgaben auszuführen. Die folgenden Beispielen sollen Sie bei den ersten Schritten für das Erstellen des Orchestratorskripts unterstützen, das die erforderlichen Installationsprogramme ausführt. In der Praxis kann das Orchestratorskript auf sehr viel mehr Ressourcen verweisen als in diesen Beispielen verwendet.

Sie müssen kein Orchestratorskript erstellen. Sie können pro App nur eine Befehlszeile verwenden. Bei Bedarf können Sie ein Skript erstellen, das die Ausgabe pro App protokolliert, wie nachfolgend beschrieben (statt ein Orchestratorskript für das gesamte Bereitstellungspaket).

Hinweis

Alle vom Skript ausgeführten Aktionen müssen unbeaufsichtigt ausgeführt werden, ohne in der Benutzeroberfläche angezeigt zu werden oder Eingriffe des Benutzers zu erfordern.

Die Skripts werden auf dem Gerät im Systemkontext ausgeführt.

Beispiel für das Debuggen

Die präzise Protokollierung ist nicht integriert, sodass die Protokollierung in das Skript selbst integriert werden muss. Hier sehen Sie ein Beispielskript, das "Hallo Welt" in einer Protokolldatei protokolliert. Bei Ausführung auf dem Gerät ist die Protokolldatei nach Abschluss der Bereitstellung verfügbar. Wie Sie in den folgenden Beispielen sehen werden, wird empfohlen, jede Aktion zu protokollieren, die ihr Skript ausführt.

set LOGFILE=%SystemDrive%\HelloWorld.log
echo Hello, World >> %LOGFILE%

EXE-Beispiel

Dieses Beispielskript zeigt, wie Sie eine Protokolldatei auf dem Systemlaufwerk erstellen, eine App über ein .exe Installationsprogramm installieren und die Ergebnisse in die Protokolldatei wiedergeben.

set LOGFILE=%SystemDrive%\Fiddler_install.log
echo Installing Fiddler.exe >> %LOGFILE%
fiddler4setup.exe /S >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

MSI-Beispiel

Das Verfahren ist mit dem Verfahren für das zuvor gezeigte Installationsprogramm identisch. Die App wird jedoch über ein MSI-Installationsprogramm installiert. Beachten Sie, dass msiexec mit dem Flag /quiet aufgerufen wird, um die Anforderung zu erfüllen, dass innerhalb von Bereitstellungspaketen ausgeführte Skripts unbeaufsichtigt ausgeführt werden müssen.

set LOGFILE=%SystemDrive%\IPOverUsb_install.log
echo Installing IpOverUsbInstaller.msi >> %LOGFILE%
msiexec /i IpOverUsbInstaller.msi /quiet >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

PowerShell-Beispiel

Dies ist ein Beispielskript mit Protokollierung, das zeigt, wie ein PowerShell-Skript über die Einstellung "Bereitstellungsbefehle" ausgeführt wird. Das PowerShell-Skript, auf das in diesem Beispiel verwiesen wird, muss ebenfalls im Paket enthalten sein und den gleichen Anforderungen entsprechen wie alle Skripts, die im Bereitstellungspaket ausgeführt werden: Es muss ohne Benutzerinteraktion im Hintergrund ausgeführt werden.

set LOGFILE=%SystemDrive%\my_powershell_script.log
echo Running my_powershell_script.ps1 in system context >> %LOGFILE%
echo Executing "PsExec.exe -accepteula -i -s cmd.exe /c powershell.exe my_powershell_script.ps1" >> %LOGFILE%
PsExec.exe -accepteula -i -s cmd.exe /c 'powershell.exe my_powershell_script.ps1' >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Auszug aus einem CAB-Beispiel

Dieses Beispielskript zeigt die Erweiterung eines .cab aus dem Skript für Bereitstellungsbefehle und die Installation des erweiterten setup.exe

set LOGFILE=%SystemDrive%\install_my_app.log
echo Expanding installer_assets.cab >> %LOGFILE%
expand -r installer_assets.cab -F:* . >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%
echo Installing MyApp >> %LOGFILE%
setup.exe >> %LOGFILE%
echo result: %ERRORLEVEL% >> %LOGFILE%

Aufrufen mehrerer Skripts im Paket

Ihr Bereitstellungspaket kann mehrere CommandFiles enthalten.

Pro Bereitstellungspaket ist eine Befehlszeile zulässig. Die oben gezeigten Batchdateien sind Orchestratorskripts, die die Installation verwalten und andere im Bereitstellungspaket enthaltene Skripts aufrufen. Das Orchestratorskript sollte über die im Paket angegebene Befehlszeile aufgerufen werden.

Im Folgenden finden Sie eine Tabelle, die diese Beziehung anhand des obigen PowerShell-Beispiels beschreibt:

ICD-Einstellung Wert Beschreibung
ProvisioningCommands/DeviceContext/CommandLine cmd /c PowerShell_Example.bat Die Befehlszeile, die zum Aufrufen des Orchestratorskripts erforderlich ist.
ProvisioningCommands/DeviceContext/CommandFiles PowerShell_Example.bat Das spezifische Orchestratorskript, auf das durch die Befehlszeile verwiesen wird und das den Aufruf der erforderlichen Installationsprogramme oder die Ausführung anderer Aktionen ausführt, beispielsweise Erweiterungen von CAB-Dateien. Dieses Skript muss die erforderliche Protokollierung ausführen.
ProvisioningCommands/DeviceContext/CommandFiles my_powershell_script.ps1 Andere Ressourcen, auf die durch das Orchestratorskript verwiesen wird. In diesem Beispiel gibt es nur eine, aber hier könnten viele Ressourcen referenziert werden. Ein häufiges Anwendungsszenario besteht in der Verwendung des Orchestrators, um eine Reihe von install.exe- oder setup.exe-Installationsprogrammen aufzurufen, um mehrere Anwendungen zu installieren. Jedes dieser Installationsprogramme muss hier als Ressource angegeben werden.

Hinzufügen von Skripts zu Bereitstellungspaketen

Wenn Sie die Batchdatei geschrieben haben und die Referenzobjekte eingeschlossen werden können, können Sie sie einem Bereitstellungspaket im Windows Configuration-Designer hinzufügen.

Geben Sie mithilfe von Windows-Konfigurations-Designer in der Einstellung „CommandLine“ im Bereitstellungspaket die vollständigen Details dazu an, wie das Skript ausgeführt werden soll. Dazu gehören Flags oder andere Parameter, die Sie normalerweise in der Befehlszeile eingeben würden. Wenn das Paket beispielsweise ein App-Installationsprogramm mit dem Namen install.exe und ein Skript zum Automatisieren der Installation mit dem Namen InstallMyApp.bat enthält, sollte die Einstellung ProvisioningCommands/DeviceContext/CommandLine folgendermaßen konfiguriert werden:

cmd /c InstallMyApp.bat

In Windows-Konfigurations-Designer sieht dies wie folgt aus:

Befehlszeile in Ausgewählte Anpassungen.

Sie müssen auch die entsprechenden Ressourcen für diese Befehlszeile hinzufügen, einschließlich des Orchestratorskripts und aller Ressourcen, auf die dieses verweist, wie Installationsprogramme oder CAB-Dateien.

In Windows-Konfigurations-Designer erfolgt dies durch Hinzufügen von Dateien unter der Einstellung ProvisioningCommands/DeviceContext/CommandFiles.

Befehlsdateien in Ausgewählten Anpassungen.

Wenn Sie fertig sind, erstellen Sie das Paket.

Hinweise

  1. ProvisioningCommands unterstützt keine Benutzerinteraktionen oder Konsolenausgaben. Alle Aufgaben müssen unbeaufsichtigt ausgeführt werden können. Wenn Ihr Skript versucht, eine der folgenden Aktionen auszuführen, führt dies zu undefiniertem Verhalten und kann das Gerät in einen nicht wiederherstellbaren Zustand versetzen, wenn es während des Setups oder der Out-of-Box-Benutzeroberfläche ausgeführt wird:

    1. Echo an konsole
    2. Alles auf dem Bildschirm anzeigen
    3. Eingabeaufforderung für den Benutzer über ein Dialogfeld oder einen Installations-Assistenten
  2. Bei Anwendung beim ersten Starten wird die Bereitstellung an einem frühen Punkt der Startsequenz und vor Einrichtung eines Benutzerkontexts ausgeführt. Achten Sie daher darauf, nur Installationsprogramme einzuschließen, die zu diesem Zeitpunkt ausgeführt werden können. Andere Installationsprogramme können über ein Verwaltungstool bereitgestellt werden.

  3. Wenn das Gerät aufgrund eines fehlerhaften Skripts in einen nicht wiederherstellbaren Zustand versetzt wird, können Sie es mithilfe der Wiederherstellungsoptionen im Windows-Client zurücksetzen.

  4. Die CommandFile-Ressourcen werden auf dem Gerät in einem temporären Ordner bereitgestellt, der für jedes Paket spezifisch ist.

    1. Bei Paketen, die während der Out-of-Box-Benutzeroberfläche hinzugefügt werden, ist dies in der Regel in %WINDIR%\system32\config\systemprofile\appdata\local\Temp\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

      Das 0 nach Commands\ -Element verweist auf die Installationsreihenfolge und gibt die erste Zu installierende App an. Die Zahl wird für jede App im Paket erhöht.

    2. Bei Paketen, die durch Doppelklicken auf ein bereits bereitgestelltes Gerät hinzugefügt werden, befindet sich dies im temporären Ordner für den Benutzer, der das Bereitstellungspaket ausführt: %TMP%\ProvisioningPkgTmp\<{PackageIdGuid}>\Commands\0

  5. Die Befehlszeile wird mit dem Verzeichnis als Arbeitsverzeichnis ausgeführt, in dem die CommandFiles bereitgestellt wurden. Dies bedeutet, dass Sie in der Befehlszeile oder im Skript nicht den vollständigen Pfad zu den Ressourcen angeben müssen.

  6. Die Komponente für die Bereitstellung zur Laufzeit versucht, die Skripts aus dem Bereitstellungspaket so früh wie möglich auszuführen, abhängig von der Phase, in der die PPKG-Datei hinzugefügt wurde. Wenn das Paket beispielsweise während der Ausführung der Windows-Willkommensseite hinzugefügt wurde, wird es unmittelbar nach Anwendung des Pakets ausgeführt, während die Windows-Willkommensseite weiter ausgeführt wird. Dies erfolgt, bevor dem Benutzer Optionen für die Konfiguration des Benutzerkontos angezeigt werden. Ein sich drehender Statusdialogfeld wird angezeigt, und "Bitte warten" wird auf dem Bildschirm angezeigt.

    Hinweis

    Zu diesem Zeitpunkt beträgt das Zeitlimit für den Bereitstellungsprozess 30 Minuten. Alle Skripts und Installationen müssen innerhalb dieses Zeitraums abgeschlossen werden.

  7. Die Skripts werden im Hintergrund ausgeführt, während die restliche Bereitstellung weiter ausgeführt wird. Bei Paketen, die auf vorhandenen Systemen mithilfe des Doppelklicks zur Installation hinzugefügt werden, wird keine Benachrichtigung angezeigt, dass die Bereitstellung oder Skriptausführung abgeschlossen ist.