Seite 1 von 1

Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 13. Jul 2017, 12:28
von Sascha Offe
Hallo,

wie kann ich denn den User fragen, ob er einer Software-Installation bzw. einem Update zustimmen möchte?

Hintergrund: Software X soll aktualisiert werden. Damit das funktioniert, muss die laufende Instanz gekillt werden und/oder am Ende ein Neustart des Rechner durchgeführt werden.

Unsere Pakete laufen i.d.R. komplett stumm, so dass der User nie was mitbekommt (setup.inf mit /S0, die setup.exe u.ä. mit den üblichen Schaltern wie /s(ilent) /q(uiet) usw.). Aber in dem oben genannten Fällen ist das natürlich nicht machbar: Wir können dem User ja nicht ohne Ankündigung einfach das Programm schließen und den Rechner kommentarlos neu starten.

In einem anderen Leben haben ich daher eine passendes Konstrukt entwickelt, aber für die, äh... "Skriptsprache", die in der Empirum-/Setup.inf-Welt genutzt wird, fehlt mir noch das Wissen, wie ich das angehen soll.

Irgendjemand ein passendes Code Snippet zur Hand?

Pseudo-Code-mäßig also so etwa in dieser Art:

Code: Alles auswählen

AskUser("Update von X steht an. Das Programm wird geschlossen und der Rechner neu gestartet. Jetzt durchführen?", yes  no)

if yes/UserAgreed
- setup.exe /s
- reboot
if no/UserDisagreed
- ABORT & try next time again (wobei das idealerweise "endlos" versucht werden sollte (User soll gefälligst zustimmen)... also vmtl. die max. Anzahl der Versuche sehr, sehr hoch setzen?

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 13. Jul 2017, 17:30
von Sascha Offe
Nach etwas Suche hier im Forum und in der Doku könnte "AskKillProcesses" hilfreich sein.

Falls jemand noch weitere Tipps hat, nur zu :wink:

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 13. Jul 2017, 17:49
von dstirner
Hallo,
AskKillProsesses ist schon mal gut.

Du musst jedoch zuvor noch die betreffenden Prozesse defnieren.
Hier ein Auszug aus meinem Firefox Paket:

Code: Alles auswählen

[Processes]
Firefox=*Firefox*, Mozilla Firefox, KILLPROCESS ABORT

[Product]

AddMeter -1
; Prompt to the User if the application is running? Close the program after timeout
AskKillProcesses 600, Firefox
In der Sektion [Prozesses] definiere ich die betroffenen Prozesse und unter Product überprüfe ich dann, ob der Prozess läuft.
Falls ja, hat der User 600 Sekunden Zeit, die Anwendung zu schließen. Falls die Anwendung nicht innerhalb der 600 Sekunden beendet wird, wird sie das Script abgebrochen.

Ich hoffe, das hilft weiter.

VG
dstirner

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 14. Jul 2017, 12:31
von Sascha Offe
Hi,

danke dafür.

Wobei ich mich wohl auch noch auf die Suche nach einer generischen Lösung machen werden: Simpler Dialog, bei dem der User JA oder NEIN klicken kann und ich dann im im Skript dann je nach Antwort abzweige. Denn es muss ja nicht immer ein Prozess gekillt werden. Manchmal will man ja auch nur den User vor einem anstehenden aber notwendigen Reboot warnen.

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 14. Jul 2017, 14:45
von Sascha Offe
So, hab jetzt noch etwas weitergesucht...

"AskKillProcesses" gefällt mir ehrlicherweise nicht so sehr: Zum einen gibt es Fälle, wo es keinen Prozess zu killen gibt, es eher um einen Neustart am Ende geht. Oder ich dem Setup das Killen überlassen möchte und nicht da reingrätschen möchte.

"AskInfo/InfoText": Funktioniert nur mit min. /S3: Zuviel des guten.
Ausserdem ist das ja wirklich nur eine Anzeige und "Weiter"-Button, keine JA/NEIN-Abfrage.

"AskLicence/LicenceText": Könnte man ja zweckentfremden, hat zumindest eine JA / NEIN -Option.
Aber auch wieder: /S3 ist eigentlich zu geschwätzig...

"Prompt" ist auch zuviel des guten: Ich brauch nur eine Ja-Nein-Button-Kombi, keine Textfelder, die ich irgendwie umdefiniere (nur Zahlen, nur eine Stelle, dass dann "1" "JA" bedeuten soll ist ja für normale Anwender eher nicht intuitiv...)

"SplashDialog": Zeigt ja auch nur Text an, keine Abfrage/Auswertung von JA/NEIN.

Bisheriges Fazit:
"AskLicence" wäre das Einzige, was annäherend dem entspricht, was ich suche.
Aber so richtig toll finde ich das auch nicht...

Noch Ideen?

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 24. Jul 2017, 16:29
von r.wiegel
Wobei ich mich wohl auch noch auf die Suche nach einer generischen Lösung machen werden: Simpler Dialog, bei dem der User JA oder NEIN klicken kann und ich dann im im Skript dann je nach Antwort abzweige. Denn es muss ja nicht immer ein Prozess gekillt werden. Manchmal will man ja auch nur den User vor einem anstehenden aber notwendigen Reboot warnen.
so was?:

Code: Alles auswählen

[Set:Product]
Callhidden cmd.exe /c Powershell.exe -NoProfile -ExecutionPolicy Bypass -file "%src%\CheckUser.ps1"  "Interne IT" "...einverstanden?"
If %errorlevel%==0 Then "Set:ValueYes" Else "Set:ValueNo" EndIf

[Set:ValueYes]

[Set:ValueNo]
CheckUser.ps1:

Code: Alles auswählen

param(
[string]$FensterTitel,
[string]$Abfrage)


$wPowerShell=new-object -comobject wscript.shell

$Wartezeit = 0 # ohne Timeout
$Schaltfläche = 4 

$Antwort=$wPowershell.popup($Abfrage,$Wartezeit,$FensterTitel,$Schaltfläche)

if ($Antwort-eq 6) # Ja = 6, Nein = 7
{
    Write-Host "Exiting with code 0"
    exit 0
}
else
{
    Write-Host "Exiting with code 1"
    exit 1
}

Re: Benutzer fragen, ob Installation jetzt OK ist

Verfasst: 08. Sep 2017, 10:49
von Sascha Offe
Jaha, die Powershell-Variante ist doch was Feines, danke für den Tipp.

Ich teste es gerade, sieht schonmal um Welten besser/benutzerfreundlicher aus als das, was man mit Empirum-Bordmitteln dem Anwender zumuten muss :)