SAP GUI Paket erstellen *Fragen*

Folgende Situation mit Config Manager (SCCM):

Bisher: SAP GUI 8.0 ist auf allen Clients nach der SAP-Install-Variante (Netzwerkshare) installiert.
Paketaufruf: „ServiceUIx64.exe“ Deploy-Application.exe
(Führt letztlichs aus: Execute-Process -Path ‚SAPGui_8.00_DE_20241212_1514.exe‘ -Parameters ‚/noDlg /Package=SAPGui_8.00_DE‘ -IgnoreExitCodes ‚129‘ )
Heraus kommt:

Zukunft: SAP soll upgedatet werden zu Patchversion 16, aber diesmal eben mit APD…dabei laufen wir immer in Handlingprobleme, was IMPORT von Dateien oder einfach nur Versionsnummernänderungen angeht. Mit der Anleitung werden wir nicht so recht warm, was Details angeht :frowning: Anleitung: neo42 Onlinehilfe - service.neo42.de

  1. Ein Verzeichnis mit den neuen SAP-Files liegt vor
  2. Lt. Anleitung geht es wie folgt weiter:

Paket mit den gepatchten Quellen in das Deployment-System importieren

  • Laden Sie das Paket in den FileStorage des APC und von dort auf die lokale Festplatte

  • Entpacken Sie das Zipfile und fügen dem Files Ordner die gepatchten Quellen hinzu

  • Editieren Sie in der Datei neo42PackageConfig.json die Versionsnummer, indem Sie zum Beispiel die Patchnummer anhängen (Beispiel Patch 16: 8.00.16)

  • Hinterlegen Sie in der Setup.cfg bei der Option PACKAGE den Paketnamen (so wie dieser in der Vorversion hinterlegt war)

  • Deaktivieren Sie in der Setup.cfg die Softmigration.

  • Zippen Sie den Ordner mit der Versionsnummer und laden dieses Zip in den FileStorage des APC.

  • Importieren Sie dieses Paket nun in das Deployment-System

Schon der erste Aufzählungspunkt ist unklar:

  • Welches Paket? Es gibt ja noch keins…oder ist die leere “Hülle” gemeint? Gedacht haben wir uns, dass wir die o.g. SAP Files im Vorfeld zippen müssen, in den Fiestorage laden müssen, damit sie dann hier im Dialog auswählbar sind (3), in etwa so:

    Daraufhin erscheint im nächsten Fenster, dass wir in den CM importieren sollen:

Das erscheint unklar…wir wollten doch erst die Versionsnummer der json-Datei anpassen, die man vorher auf diesen Weg in den Filestorage laden sollte…verwirrt

  • wenn man im vorherigen Fenster eben nicht die gezippten SAP-Files auswählt:

    kommt man im nächsten Fenster zu:

    Scheint OK….
    Im Pipelinelog stehen dann viele Pfadangaben, wobei die eigentlich wichtige, wo das Paket wirklich landet, mittendrin etwas unterging, aber haben wir gefunden^^:


    Lt. Anleitung haben wir jetzt die Files dazugegeben:

    Ganz OK so?

  • Lt. Anleitung käme jetzt die zu verändernde json Datei:
    In der findet sich keine Stelle, die “Version” heißt, aber dafür einige so ähnliche, welche genau wäre hier zu ändern? Patchversion wäre 8.00.16
    „ConfigVersion“: „2023.10.31.1“,
    „VersionToCheck“: „“
    „AppVersion“: „8.00“,
    „DisplayVersion“: „8.00 Compilation 1“,
    „InstallerVersion“: „“,
    Am naheligensten ist wohl AppVersion? Das haben wir mal versucht. OK soweit?

  • lt Anleitung käme jetzt die zu verändernde setup.cfg:

    ebenso:
    SOFTMIGRATION=0
    Wobei wir uns da auch nicht ganz sicher sind, denn das Paket wäre ja das erste mal, dass es installiert wird.
    Aber soweit OK?

  • lt Anleitung zippen und in den Filestorage hochladen:

    OK so?

  • lt Anleitung jetzt importieren:

    Auswahl der 8.00.zip und next:

    Schlüssig:

    Und das haben wir ja gesetzt:

    OK soweit?

  • erster Test: nicht ganz…kann aber nur eine Kleinigkeit sein:

    Irgendwie wurde das gesamte Paketverzeichnis “8.00” in “Files” importiert…Wenn ich das manuell ändere, läuft das Paket sogar :wink:


    Aber 8.00.16 taucht nicht auf:

    grafik

  • Bliebe die Frage, wie bekommt man noch eine reg Datei mit HKCU Bestandteilen importiert?
    liegt auf dem SAP-Server:
    \\server\SAP_GUI\Anpassung_Landscape_XML\Anpassung_LandscapeXML_DE.reg
    ´´´
    [-HKEY_CURRENT_USER\Software\SAP\SAPLogon\Options]

    [HKEY_CURRENT_USER\Software\SAP\SAPLogon\Options]
    „LandscapeCacheExpiryPeriod“=dword:00000000
    „MessageServerTimeout“=dword:0000000a
    „ConfirmDelete“=dword:00000001
    „NoEditFunctionality“=dword:00000000
    „SapguiNTCmdOpts“=„“
    „HideToTrayBar“=dword:00000000
    ´´´

  • Für heute erst mal gut :wink:

Hallo APCuser,

ich habe mir soeben den Prozess im APC angeschaut und versuche mal die vorhandene Beschreibung etwas präziser zu formulieren.

Im Grunde erstellen wir ein eigenes neues Paket auf Basis des leeren Depot Pakets für SAPgui, welches wir dann manuell importieren.

Paket mit den gepatchten Quellen in das Deployment-System importieren

  • Laden Sie das SAPgui Paket, welches keine Installations-Quellen enthält, aus dem Depot in die Dateiablage des APC per klick auf “herunterladen in Dateiablage”. Dabei überspringen Sie bitte das konfigurieren der Quellen per Klick auf “weiter ohne Sourcen”, da wir die Quellen in den nächsten Schritten selbst dem Paket hinzufügen.

  • Wechseln Sie in die Dateiablage und laden die Zip Datei, die das Paket enthält (z.b. SAP_SAPGui_Ver8.00_Rev0.zip) nun von dort auf die lokale Festplatte per klick auf “Datei runterladen”.

  • Entpacken Sie das zuvor heruntergeladene Zipfile.

  • Sie sollten nun einen Versionsordner sehen (z.b. 8.00) der nun entsprechend der Patchversion umbenannt werden muss (Beispiel Patch 16: 8.00.16).

  • Dieser Versionsordner enthält einen Unterordner “Files” in den die gepatchten Quellen kopiert werden.

  • Editieren Sie in der Datei neo42PackageConfig.json die “AppVersion”, indem Sie zum Beispiel die Patchnummer anhängen (Beispiel Patch 16: 8.00.16).

  • Hinterlegen Sie in der Setup.cfg bei der Option PACKAGE den Paketnamen der SAP Installation, die auf den Clients gepatcht werden soll. Dieser wurde in der SAP Installations Server Administration - NwSapSetupAdmin.exe - vergeben (siehe setup.cfg des bisher verwendeten Pakets).

  • Deaktivieren Sie in der Setup.cfg die Softmigration in dem Sie SOFTMIGRATION=0 setzen

  • Zippen Sie nun den Versionsordner (Beispiel Patch 16: 8.00.16). Wichtig: der Versionsordner muss in der ZipDatei enthalten sein, nicht nur der Inhalt des Ordners.

  • Kehren Sie ins Application Package Center zurück und öffnen erneut die Dateiablage. Hier nun bitte über “Datei hochladen”, die zuvor erstellte neue Zip Datei in die Dateiablage hochladen.

  • Diese Zip Datei nun per Klick auf “Paket Importieren” ins Zielsystem importieren.

Um eine Reg Datei mit HKCU Daten zu importieren müsste man das Paket noch etwas mehr anpassen bevor der Versionsordner wieder gezippt wird:

  • In der Datei neo42PackageConfig.json folgenden Wert setzen: „UserPartOnInstallation“: true,

  • Die Datei “Anpassung_LandscapeXML_DE.reg” in dem Paket in den Unterordner \SupportFiles\User kopieren.

  • In der Datei Deploy-Application.ps1 die function CustomInstallUserPartBegin suchen und dort einen Powershell Befehl zum importieren der reg Datei hinzufügen:
    reg import “$dirSupportfiles\Anpassung_LandscapeXML_DE.reg”

Ich hoffe, dass es nun etwas verständlicher ist.
viele Grüße

Hallo APCuser,

bzgl. Problematik zu LandscapeXML möchte ich nur darauf hinweisen, dass es auch ein Paket “SAP SAPUILandscapeXML 8.00” zur Bereitstellung einer Datei Landscape.xml und einer optionalen Datei LandscapeGlobal.xml gibt. Für die die notwendige Datei Landscape.xml kann dabei zwischen verschiedene Zielverzeichnisse in der Paketkonfiguration ausgewählt werden …

Da ich aber die Gepflogenheiten von SAP nicht so genau kenne, kann ich nicht sagen, ob damit die gleichen Ergebnisse erzielt werden können, wie mit Setzen dieser Registrykeys oder ob dies gänzlich andere Einstellungen sind, die damit gesetzt werden. Das soll nur als Hinweis dienen, um ggf. diese zusätzliche Scriptanpassung zu umgehen und eine mögliche Konfiguration flexibler verteilen zu können.

Grüße René.

Super, danke, ich werd es durcharbeiten :wink:

Moin,

super Beschreibung :+1: Damit klappt es auf sicher.

Moin,
nach vielem Testen und noch diversen Bugs kommt es in den ersten Rollouts noch zu folgenden 2 Situationen:

  1. ohne Reboot produziert die SAP-GUI oft falsche Anzeigen. Wir würden gerne einen Reboot ans Ende setzen, der vlt. nochmals mit dem gleichen Fenster aufpoppt wie beim Starten der Applikation, wenn diese noch geöffnet ist, mit einem Timer von 10min bis zum automatischen Reboot.
  2. Da ja silent kein wirklicher Dialog sichtbar ist, klicken manche „emsige“ User schon auf das auf dem Desktop kurz erscheinende neue SAP-ICON…in dem Fall ist die GUI noch gar nicht lauffähig und das Setup stürzt so richtig ab. Die Behebung ist ziemlich umständlich und aufwendig. Die Frage wäre, ob statt Fullsilent zumindest ein minimaler Dialog angezeigt werden könnte, der auch nicht geschlossen werden kann.

Sehe gerade, dass man theoretisch für jeden Rückgabecode auch etwas anderes setzen kann.

Also für 0 z.B. Softneustart wie bei 3010…bin nicht sicher, ob das Sinn macht…vlt. geht es ja auch besser über das AppDeployToolkit…

Hi APCuser,

sollte es da nicht reichen die Paketkonfiguration so einzustellen, dass der Wert Reboot=1 gesetzt ist in der neo42PackageConfig.json? Das meldet am Ende immer eine Rebootanforderung an das Verteilsystem (3010) zurück.

Alternativ, wäre noch möglich (UND NUR IN DIESEM FALL in DIESER CustomFunction!!!) explizit in der CustomFunction CustomEnd den Aufruf:

Exit-Script -ExitCode 1641

zu hinterlegen, so dass eine „harte“ Neustartanforderung an das Verteilsystem zurückgemeldet wird.

Gruß René.

Gute Idee, teste ich mal!

Bliebe noch die Frage offen, wie man statt der „verysilent“ Installation ein Dialogfenster während der gesamten Installation anzeigen lassen könnte, welches auch nicht geschlosen werden kann, bis der Reboot-Dialog erscheint, um die „emsigen“ User auszubremsen? :face_with_peeking_eye:

Vielleicht hilft es ja, statt des /Silent Parameters den /NoDlg zu verwenden:

Hier gibt es wohl einen Fortschrittsbalken - weiß nur nicht, ob man ihn wegklicken kann…

Huhu,

neo42PackageConfig.json → Reboot=1

Ergebnis ist ein Anfang. Es erscheint das Standard SCCM Reboot Fenster mit unseren 9h, welches man dann jedoch einfach wegklicken kann:

Deploy-Application.ps1 → Function CustomEnd → Exit-Script -ExitCode 1641
Hat leider gar kein Fenster erscheinen lassen, noch einen Reboot getriggert!?

####################################
Aber mit dem Befehl soll es möglich sein:

Show-InstallationRestartPrompt -NoCountdown

wenn der Befehl vor

Exit-Script -ExitCode $mainExitCode

in der Deploy-Application.ps1 gesetzt wird…angeblich sogar mit CI! Ein feuchter Traum…wenn denn jetzt auch ein Fenster erscheinen würde, was es nicht tut :frowning:

Hat das schon mal jemand auf die Art erfolgreich hinbekommen?

Die Idee mit /noDlg ist noch in Prüfung. M.W. sagt SAP wohl explizit, dass man eben /Silent empfohlener Weise nutzen soll :frowning:

Hallo APCuser,

kurios, dass ein ReturnCode 1641 keinerlei Effekte hat, aber 1641 ist auch meist etwas unerwünschtes, da es ja eben im MSI-Standard eigentlich einen „harten“ Reboot auslösen will.

Dass der Aufruf von Show-InstallationRestartPrompt keinen Dialog zeigt ist sicher wieder dem Effekt der verschiedenen Sessions geschuldet (dazu gibt es hier schon anderweitig Diskussionen):

Das wird leider nicht so einfach richtig etwas.

Ja, SAP-Setupseitig sollte /noDlg da schon helfen das stimmt natürlich … das sollte nur das SAP-Installationsfortschrittsfenster anzeigen (meines Wissens ohne Abbruchmöglichkeit).

So, neuer Status ( und bis gestern dachte ich, ich hätt’s geschafft, dank der vielen guten Ansätze!)

  1. die SAP-GUI wird jetzt tatsächlich mit /noDLG verteilt. Dadurch bekommen wir zumindest während des SYSTEM-Kontext auch eine Sichtbarkeit, dass sich etwas tut und der User nicht ungeduldig wird :slight_smile:

  2. Nach dem SYSTEM-Kontext kommt bekanntlich der USER-Kontext. In der „function CustomInstallUserPartBegin“ in der Deploy-Application.ps1haben wir einen RestartPrompt ergänzt:

    #region CustomInstallUserPartBegin content

    ### CUSTOM CODE
    Write-Log -Message '>>> Show Restart Prompt' -Source $deployAppScriptFriendlyName
    Show-InstallationRestartPrompt -Countdownseconds 100 -CountdownNoHideSeconds 50

    #endregion CustomInstallUserPartBegin content

    Nach Anpassung der Meldungstexte in der AppDeployToolkitConfig.xml und des CI-CustomAppDeployToolkitBanner.png erhalten wir ein Fenster (3), dass schon nicht schlecht aussieht und auch letztlich tut, was es soll - informieren über den anstehend Bootvorgang und ihn ohne Abbrechmöglichkeit durchziehen :wink:

    Das ist so gut, dass das von SCCM getriggerte Fenster (2) schon gar nicht mehr nötig wäre, welches vermutlich noch erscheint auf Grund von den explizit ergänzten „AcceptedInstallRebootCodes“: „129,130“, in der neo42PackageConfig.json
    3117684 - SAP GUI for Windows: Error-Code:144 in NwSapSetup.log | SAP Knowledge Base Article

    Alle müssten durchauszufrieden sein :wink: Das Paket ist installiert, wir haben 95% Sichtbarkeit und der User wird in einen Reboot quasi gezwungen. Hindert ihn natürlich nicht, trotzdem SAP zu einem ungünstige Zeitpunkt starten, aber so viel Destruktivität müsste dann auch auf andere Weise „bestraft“ werden ^^

  3. neues Problem: Bei Anmeldung eines weiteren neuen Users am Client erhält dieser ebenfalls unsere schöne neue Reboot-Meldung, die den Rechner eben auch ungebremst einmalig neustarten lässt :see_no_evil_monkey:

    Und ja, das hat der Userteil nun mal so an sich, dass er eben auch bei neuen Usern nochmal ausgeführt wird…lässt sich das dann doch nochmal anders lössen, dass es eben bei dem neuen User nicht nochmal aufgerufen wird?

Hallo APCuser,

eine vorgefertigte Lösung gibt es da nicht, man muss selbst noch etwas Code hinzufügen …

  • doppelte Aufforderung zum Reboot
    Man kann das Paket grundsätzlich über Reboot=2 in der neo42PackageConfig.json nicht rebooten lassen, da ja eh die explizite Aufforderung zum Reboot an den angemeldeten Benutzer erfolgt. Diese Einstaellung würde das Paket auch im benötigten Rebootfall mit Returncode 0 enden lasen, andere Fehlerfälle werden dabei trotzdem berücksichtigt (Fehler → Paketabbruch).

  • Anzeige der Meldung für alle Nutzer
    Allgemeiner Hinweis: Folgendes funktioniert generell NUR so, wenn das Paket standardmäßig keinen Nutzerpart ausführen muss - was ja im Standard SAP-Paket der Fall ist.
    Im Nutzerpart selbst steht dabei nur der Code zur Anzeige der Benutzeranmeldung, wie jetzt schon umgesetzt.
    Wenn man nun die Einstellung UserPartOnInstallation=false in UserPartOnInstallation setzt, was keine automatische Aktivierung eines Nutzerparts für das Paket zur Folge hat, kann man diesen aber selbst in Abhängigkeit eines angemeldeten Benutzers im letzten möglichen Schritt vor dem Paketabschluss bei der Installation (also in der Custom-Funktion ‚CustomInstallAndReinstallAndSoftMigrationEnd‘) für den gerade angemeldeten Benutzer auslösen. Für den Fall, dass zur Paketausführung kein Benutzer angemeldet ist, wird andererseits Reboot=1 gesetzt, so dass die Maschine an das Verteilsystem zurückmeldet: Reboot erforderlich.

Code-Schnipsel für die manuelle Nutzerpartsteuerung:

if ($true -eq [string]::IsNullOrEmpty($usersLoggedOn)) {
	Write-Log -Message "Forcing reboot for this package ..." -Source $deployAppScriptFriendlyName
	## force reboot in case no user is logged on
	$global:PackageConfig.Reboot = 1
}
else {
	Write-Log -Message "Preparing user information to request a reboot  ..." -Source $deployAppScriptFriendlyName
	## prepare UserPart installation for showing splash info box to a logged in user
	Copy-File -Path "$scriptRoot\$($xmlConfigFile.GetElementsByTagName('BannerIcon_Options').Icon_Filename)" -Destination "$($global:PackageConfig.App)\$global:UserPartDir\"
	Copy-Item -Path "$scriptDirectory\*" -Exclude "Files", "SupportFiles" -Destination "$($global:PackageConfig.App)\$global:UserPartDir\" -Recurse -Force -ErrorAction Continue | Out-Null
	if ($true -eq (Test-Path -Path "$($global:PackageConfig.App)\neo42-Install\Setup.cfg")) {
		Copy-File -Path "$($global:PackageConfig.App)\neo42-Install\Setup.cfg" -Destination "$($global:PackageConfig.App)\$global:UserPartDir\"
	}
	Update-NxtXmlNode -FilePath "$($global:PackageConfig.App)\$global:UserPartDir\$(Split-Path "$scriptRoot" -Leaf)\$(Split-Path "$appDeployConfigFile" -Leaf)" -NodePath "/AppDeployToolkit_Config/Toolkit_Options/Toolkit_RequireAdmin" -InnerText "False"
	Update-NxtXmlNode -FilePath "$($global:PackageConfig.App)\$global:UserPartDir\$(Split-Path "$scriptRoot" -Leaf)\$(Split-Path "$appDeployConfigFile" -Leaf)" -NodePath "/AppDeployToolkit_Config/UI_Options/ShowBalloonNotifications" -InnerText "False"
	if ($true -eq (Test-Path "$($global:PackageConfig.App)\$global:UserPartDir\DeployNxtApplication.exe")) {
		Execute-ProcessAsUser -Path "$($global:PackageConfig.App)\$global:UserPartDir\DeployNxtApplication.exe" -Parameters "TriggerInstallUserpart" -ContinueOnError $true
	}
	else {
		Execute-ProcessAsUser -Path "$env:Systemroot\System32\WindowsPowerShell\v1.0\powershell.exe" -Parameters "-ExecutionPolicy $($xmlConfigFile.AppDeployToolkit_Config.NxtPowerShell_Options.NxtPowerShell_ExecutionPolicy) -NonInteractive -NoProfile -File ""$($global:PackageConfig.App)\$global:UserPartDir\Deploy-Application.ps1"" TriggerInstallUserpart" -ContinueOnError $true
	}
}

Was natürlich trotzdem passieren kann, dass der angemeldete Benutzer, den angeforderten Reboot nicht ausführt und sich nur abmeldet …

Hallo, danke für den weiteren Ansatz, habe jetzt auch wieder Zeit gefunden, mich mehr damit zu beschäftigen und die 99% Lösung erreicht.

Sieht dann so aus:


Das Fenster erscheint im SYSTEMKONTEXT und damit auch nur einmal beim angemeldeten User, sonst nicht!

Vorraussetzung Configmanager Bereitstellungstyp:

und die entsprechenden Logos:

#Anpassung Deploy-Application.ps1 nach Complete-NxtPackageInstallation:

if (-not [string]::IsNullOrEmpty($usersLoggedOn))
{
Write-Log -Message „Displaying mandatory reboot prompt.“ -Source $deployAppScriptFriendlyName
Show-InstallationRestartPrompt `
-CountdownNoHideSeconds 60 `
-NoCountdown $true `
-NoSilentRestart $true
}

#Anpassung AppDeployToolkitConfig.xml:
<UI_Messages_EN>
<RestartPrompt_Message>ATTENTION! BEFORE YOU CAN LAUNCH SAP FOR THE FIRST TIME AFTER INSTALLATION, YOU MUST RESTART THE COMPUTER!</RestartPrompt_Message>
<UI_Messages_DE>
<RestartPrompt_Message>ACHTUNG! BEVOR SAP NACH DER INSTALLATION ZUM ERSTEN MAL AUFGERUFEN WERDEN DARF, MUSS DER COMPUTER NEU GESTARTET WERDEN!</RestartPrompt_Message>

#Anpassung Setup.cfg:
PACKAGE=SAP GUI 8.00 DE
SOFTMIGRATION=0

#Anpassung neo42PackageConfig.json:
„AppVersion“: „8.00.16“,
„Reboot“: 0,
„UserPartOnInstallation“: true,
„InstPara“: „/NoDLG /Package=\“%SAPPACKAGE%\„“,

Den letzten Prozent würde ich geben, wenn mit einem weiteren, während der gesamten Installation(!) erscheineneden Fenster, von dem für ca. 20s erscheinenden SapLogon-Desktopicon, abgelenkt werden könnte, auf dass da kein User mehr drauf klickt :wink:

Nach 80-20 Regel lief das eigentlich auch schon alles vor einem Monat, aber wenn noch irgend jemand bei sich Hand anlegen will, viel Spaß :wink:

Hallo APCuser,

nur als genereller Hinweis:
Diese Anpassung am Script ist allerdings mit Vorsicht durchzuführen, da sie außerhalb der Custom-Funktionen erfolgt und grundsätzlich bei Standardaktionen zu Framework-Aktualisierungen nicht beachtet werden würde und IN DEM FALL wieder manuell übernommen werden müßte.