10 Replies Latest reply on Apr 30, 2014 2:28 AM by hellemon

    Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)

    hellemon Rookie
      Hallo Forum,

      ich bin neu im Thema Frontrange DSM und hätte eine Frage an euch, zu den Parametern CheckInstallMode in einem eScript.

      Das Thema Softwareverteilung ist mir ein Begriff, hatte das Glück alle mal auszuprobieren (CCM, Altiris, Baramundi, SCCM und jetzt die DSM).

      Grundsätzlich wenn ich eine Software installiere, gibt es doch nur zwei Sinnvolle Ansätze die im Skript beachtet werden sollten.

      1.) Abfrage --> ist aktuelle Software vorhanden --> Ja, verlasse das Skript --> Nein, aktuelle Software ist nicht vorhanden --> Installiere aktuelle Software.

      oder

      2.) Abfrage --> Ist aktuelle oder ältere Software vorhanden --> Nein, Software ist älter --> Deinstalliere alte Software und Installiere neue Software.

      Jetzt habe ich hier eine IF-ELSE Abfrage, die im Skript drei Zustände abfragen sollte, leider habe ich keinen der mir den Sinn der Abfrage erklären kann.

      Ich werde aus der Abfrage nich ganz schlau. Auch kenne ich noch nicht alle Optionen die DSM abdecken kann.


      Beispielskript für WinSCP 5.5.3


      !####################################################################################################################
      !# Ersteller: Vorname Nachname
      !# Erstellungsdatum: 01.01.1970
      !# Freigabe: Vorname Nachname
      !# Freigabedatum: 02.01.1970
      !# Skriptbeschreibung: Beschreibungstext
      !####################################################################################################################
      !
      If CheckInstallMode(imAppRepair)
      goto Reparatur
      Else
        If CheckInstallMode(imReinstall)
          goto Reparatur
        Else
          goto Installation
      !
      : Installation
      !WinSCP 5.5.3 Installation
      Set('_ReturnCode','0')
      Set('Software','WinSCP 5.5.3')
      RunAsEx('.\Extern$\winscp553setup.exe','/VERYSILENT /NORESTART /LOADINF=".\Extern$\winscp.inf",'','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TS
      If not %_ReturnCode%='0'
      ExitProcEx(Failed,'Installation von %Software% wurde mit Fehlercode %_ReturnCode% beendet.')
      !
      : Reparatur
      !WinSCP 5.5.3 Reparatur
      Set('_ReturnCode','0')
      Set('Software','WinSCP 5.5.3')
      If Exist('%ProgramFilesDir%\WinSCP\unins000.exe')
      RunAsEx('%ProgramFilesDir%\WinSCP\unins000.exe','/VERYSILENT','','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TW
      Else
      RunAsEx('%ProgramFilesDir%\WinSCP\unins001.exe','/VERYSILENT','','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TW
      If not %_ReturnCode%='0'
      ExitProcEx(Failed,'Reparatur-Deinstallation von %Software% wurde mit Fehlercode %_ReturnCode% beendet.')
      !
      Set('_ReturnCode','0')
      Set('Software','WinSCP 5.5.3')
      RunAsEx('.\Extern$\winscp553setup.exe','/VERYSILENT /NORESTART /LOADINF=".\Extern$\winscp.inf",'','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TS
      If not %_ReturnCode%='0'
      ExitProcEx(Failed,'Reparatur-Installation von %Software% wurde mit Fehlercode %_ReturnCode% beendet.')
      !
      : $BeginUninstallScript
      !WinSCP 5.5.3 Deinstallation
      Set('_ReturnCode','0')
      Set('Software','WinSCP 5.5.3')
      If Exist('%ProgramFilesDir%\WinSCP\unins000.exe')
      RunAsEx('%ProgramFilesDir%\WinSCP\unins000.exe','/VERYSILENT','','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TW
      Else
      RunAsEx('%ProgramFilesDir%\WinSCP\unins001.exe','/VERYSILENT','','','10','_ReturnCode',raUseSisAccount+WaitForExecution+UndoneContinueParentScript)/TW
      If not %_ReturnCode%='0'
      ExitProcEx(Failed,'Deinstallation von %Software% wurde mit Fehlercode %_ReturnCode% beendet.')


      Würde mich freuen wenn mir hier jemand die Frage beantworten könnte.

      Danke und Gruß
      Helmut
        • 1. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
          _Mel_ Master
          der befehl fragt nicht den installationsstatus ab (also ob die software zur zeit installiert ist), sondern den installationsmodus (also in welchem modus das script ausgeführt wird.

          da gibt's
          install
          reinstall
          repair
          und uninstall
          (und update, das damit anscheinend nicht abgefragt werden kann...)

          außerdem kannst du noch unterscheiden ob gerade der maschinen oder der benutzerteil installiert wird

          für die abfrage ob eine bestimmte software installiert ist gibt's IsSwPackageRevInstalled
          • 2. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
            derniwi Master
            Hallo,

            naja, es kommt halt auch darauf an, welcher Art deine Installationsquelle ist. Man behandelt eine MSI-basierte Installation etwas anders als eine Setup.exe. Bei der Setup.exe unterscheide ich dann wieder, womit diese erstellt ist (NSIS, InstallShield...).

            Bei manchen Anwendungen kann man neuere Versionen einfach über ältere Installieren (z.B. Adobe Flash Player), andere erfordern die Deinstallation der älteren Version (z.B. TeamViewer).

            Insofern kann man kein allgemeingültiges Szenario entwerfen, welches immer paßt (bzw. das wäre dann sicherlich so komplex, dass es vieles in Frage stellen würde).

            Wenn mit einer MSI-Installation ein Problem auftritt, kann man in der DSM-Konsole das Paket reparieren lassen, damit können dann die Funktionen des MSI genutzt werden. Eine Setup.exe bietet dass in den allermeisten Fällen nicht.

            Wenn man mit DSM ein MSI-Paket installiert, kann der Anwender dieses nicht über die Systemsteuerung entfernen. Da wird es dann "nur" noch angezeigt. Möchte man, dass der Anwender hier mehr Möglichkeiten hat, nimmt man nicht den DSM-Befehl MSIInstallProduct, sondern installiert über die msiexec.exe...

            Was auch einige Anwender hier schade finden, ist der fehlende Bereich für eScript-Codeschnipsel. Man will das Rad ja nicht immer wieder neu erfinden.

            Gruß
            Nils
            • 3. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
              hellemon Rookie
              Hallo Mel,
              hallo derniwi,

              danke für eure Antworten, @Mel noch mal darauf zurückzukommen. Damit ich das auch richtig verstehe.

              Die If-Else Schleife agiert mit der DSM Konsole
              Das heißt wenn ich in der DSM Konsole auf Software-Policy --> Installation reparieren klicke, frägt er folgendes im Skript ab?

              If CheckInstallMode(imAppRepair)
              goto Reparatur


              Und wenn ich in der DSM auf Software-Policy --> Neu Installieren klicke, springt er mir hier ins Skript rein?

              Else
                If CheckInstallMode(imReinstall)
                  goto Reparatur


              Wenn die Software-Policy dem Client neu zugewiesen wird springt er automatisch zur Sprungmarke :Installation

              Else
                  goto Installation


              Und wenn ich die Software-Policy lösche, springt er mir automatisch zur folgenden Sprungmarke :$BeginUninstallScript

              Ist das soweit Richtig?

              Ich bin derzeit noch SCCM verseucht und da gibt es eben nur zwei zustände abzufragen, da alles über Batchdateien läuft, alles andere wäre zu komplex geworden.

              REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Windows\Microsoft\Windows\CurrentVersion\Uninstall\BlaBlaBla"
              cls

              IF %errorlevel% EQU 0 ( GOTO :UNINSTALL
              ) ELSE (
              IF %errorlevel% GTR 0 GOTO :INSTALL
              )


              Auch danke ich dir derniwi, wieder was dazugelernt. :-)

              Gruß Helmut
              • 4. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                derniwi Master
                Hallo Helmut,


                Und wenn ich die Software-Policy lösche, springt er mir automatisch zur folgenden Sprungmarke :$BeginUninstallScript


                Fast.

                Bei der Deinstallation wird die Installation in der gegebenen Reihenfolge abgearbeitet und geschaut, welche Befehle umgekehrt werden können. Das geht leider nicht bei allen, z.B. Set oder Execute / ExecuteEx (und andere) lassen sich nicht umkehren. Das hat dann gegebenenfalls größere Folgen, die man im einzelnen prüfen muss. Dafür hilft dann aber auch das Protokoll, welches erstellt wird (auf dem Client mal über Start -> Ausführen -> "nimoni" den NetInstall Monitor starten und dort den LogLevel auf 0 ändern). Je nachdem, wie das Paket gestartet wird, sind dann meist die Protokolle niai32_XXX.log und nisrv32_XXX.log interessant. Dort nach "run #" suchen und man ist knapp überhalb der Installationsaufrufe.

                Gruß
                Nils
                • 5. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                  ZellOr Apprentice


                  ...

                  Was auch einige Anwender hier schade finden, ist der fehlende Bereich für eScript-Codeschnipsel. Man will das Rad ja nicht immer wieder neu erfinden.

                  ...



                  Hallo derniwi,

                  mein FR (Feature request for userdefined functions in eScripts) diesbezüglich wurde letztes Jahr abgelehnt

                  Begründung: This Feature request goes way beyond the scope of what a packaging engine provides.

                  Grüße
                  • 6. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                    derniwi Master
                    Ich befürchte, die haben das bei FrontRange etwas falsch verstanden. Das hier ist ja auch eher ein User-to-User-Forum, und hier einen Abschnitt für (nicht von FrontRange-Seite unterstützten) Code-Schnipseln einzurichten, wäre ja kein wirkliches Problem...
                    • 7. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                      ZellOr Apprentice
                      Ich glaube Ich habe dich falsch verstanden Ich wollte Benutzerdefinierte-Funktionen in DSM. Du willst wohl einen Bereich im Forum zum austauschen von Code-Schnipseln.
                      • 8. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                        hellemon Rookie

                        Hallo Helmut,


                        Fast.

                        Bei der Deinstallation wird die Installation in der gegebenen Reihenfolge abgearbeitet und geschaut, welche Befehle umgekehrt werden können. Das geht leider nicht bei allen, z.B. Set oder Execute / ExecuteEx (und andere) lassen sich nicht umkehren. Das hat dann gegebenenfalls größere Folgen, die man im einzelnen prüfen muss. Dafür hilft dann aber auch das Protokoll, welches erstellt wird (auf dem Client mal über Start -> Ausführen -> "nimoni" den NetInstall Monitor starten und dort den LogLevel auf 0 ändern). Je nachdem, wie das Paket gestartet wird, sind dann meist die Protokolle niai32_XXX.log und nisrv32_XXX.log interessant. Dort nach "run #" suchen und man ist knapp überhalb der Installationsaufrufe.

                        Gruß
                        Nils



                        Hallo Nils,

                        danke dir für die Beschreibung. Das mit dem umkehren der Befehle, habe ich in der Doku gelesen, ist aber gut zu wissen das hier nicht alle Befehle umgekehrt werden können.

                        Das mit deiner Logeinstellung ist auch ein sehr guter Tipp, werde ich gleich bei meinem nächsten Paket ausprobieren. :-)

                        Das mit dem eScript-Codeschnipsel Bereich würde ich ebenfalls befürworten, hier würde man sehr schnell, sehr viel lernen.

                        Viele Grüße
                        Helmut
                        • 9. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                          _Mel_ Master

                          @Mel noch mal darauf zurückzukommen. Damit ich das auch richtig verstehe.

                          Die If-Else Schleife agiert mit der DSM Konsole
                          Das heißt wenn ich in der DSM Konsole auf Software-Policy --> Installation reparieren klicke, frägt er folgendes im Skript ab?
                          [...]
                          Und wenn ich in der DSM auf Software-Policy --> Neu Installieren klicke, springt er mir hier ins Skript rein?
                          [...]
                          Wenn die Software-Policy dem Client neu zugewiesen wird springt er automatisch zur Sprungmarke :Installation

                          ja, wobei der datenfluß so aussieht:
                          - dsmc modifiziert die policyinstanz
                          - installer handelt entsprechend der policyinstanz

                          der ausführungsmodus kann sich aber auch unabhängig von der dsmc ändern.
                          z.B. stehen nach einem reinstall computer alle poicyinstanzen auf reinstall, aber nach der OS installation werden sie automatisch auf install umgestellt.


                          Und wenn ich die Software-Policy lösche, springt er mir automatisch zur folgenden Sprungmarke :$BeginUninstallScript

                          wie schon geschrieben wurde, werden bei der deinstallation die befehle soweit möglich umgekehrt.
                          der :$BeginUninstallScript label hat dabei folgende bedeutung:
                          - bei installation/reinstallation/repair/update (also alles außer uninstall) wird bei erreichen dieses labels die scriptausführung beendet
                          - bei uninstall werden ab diesem label die befehle wieder normal ausgeführt, also die befehlsumkehrung wird beendet.
                          • 10. Re: Frage zu CheckInstallMode(imAppRepair) und CheckInstallMode(imReinstall)
                            hellemon Rookie

                            ja, wobei der datenfluß so aussieht:
                            - dsmc modifiziert die policyinstanz
                            - installer handelt entsprechend der policyinstanz

                            der ausführungsmodus kann sich aber auch unabhängig von der dsmc ändern.
                            z.B. stehen nach einem reinstall computer alle poicyinstanzen auf reinstall, aber nach der OS installation werden sie automatisch auf install umgestellt.

                            wie schon geschrieben wurde, werden bei der deinstallation die befehle soweit möglich umgekehrt.
                            der :$BeginUninstallScript label hat dabei folgende bedeutung:
                            - bei installation/reinstallation/repair/update (also alles außer uninstall) wird bei erreichen dieses labels die scriptausführung beendet
                            - bei uninstall werden ab diesem label die befehle wieder normal ausgeführt, also die befehlsumkehrung wird beendet.



                            Danke dir Mel, werde mir das mal notieren und regelmäßig nachlesen. :-)
                            Geht mit langsamen Schritten vorwärts.

                            Gruß Helmut