5 Replies Latest reply on Jul 3, 2018 10:07 AM by SitzRieSe

    DSM 2017.1 RegSearchFolder

    SitzRieSe Expert

      Hi Leute,

       

      ich arbeite grade an einem neuen Installations Template und probiere mit RegSearchFolder rum. Habt ihr den Befehl schon paar mal eingesetzt? Ich verstehe nicht genau was mein Paket da tut. Hier einmal das Log:

       

      18:05:50.275 2    ---->Starting uninstallation of "Inst - Mozilla Firefox 52.8.0 (Template Test)"

       

      18:05:50.290 2    -> Set('SetupFile','Firefox Setup 52.8.0esr.exe')

       

      18:05:50.306 2    -> Set('SetupParameter','-ms')

       

      18:05:50.306 2    -> Set('RegistryDisplayName','Mozilla Firefox 52.8.0 ESR (x86 de)')

       

      18:05:50.306 2    -> Set('UninstallParameter','-ms')

       

      18:05:50.306 2    -> Set('DisplayVersionValue','0')

       

      18:05:50.306 2    -> Set('RegKey','0')

       

      18:05:50.322 2    -> Set('CheckAllowed','0')

       

      18:05:50.322 1    Evaluating condition "not CheckInstallMode(imReinstall)"
      18:05:50.322 2    Condition TRUE-> entering IF part

       

      18:05:50.322 2    ->  Set('CheckAllowed','1')

       

      18:05:50.322 1    Evaluating condition "CheckInstallMode(imUpdate)"
      18:05:50.322 2    Condition FALSE  -> skipping IF part
      18:05:50.322 2    Skipping command : Set

       

      18:05:50.322 1    Evaluating condition "CheckInstallMode(imUninstall)"
      18:05:50.322 2    Condition TRUE-> entering IF part

       

      18:05:50.322 2    ->  Set('CheckAllowed','0')

       

      18:05:50.337 2    -> Set('ProcessName','0')

       

      18:05:50.368 2    -> RegSearchFolder('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','DisplayName','Firefox','0','RegReadPath',rsfString+rsfChkFullPath,rsfString+rsfChkFullPath)
      18:05:50.368 E    Warning (Module:Main, Severity:0x03): Can't resolve variable RegReadPath

       

      18:05:50.368 2    -> RegReadValueEx('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%RegReadPath%','UninstallString','Uninstall',)

       

      18:05:50.368 1    Evaluating condition "not _Uninstall_=''"
      18:05:50.368 2    Condition FALSE  -> skipping IF part
      18:05:50.368 2    Skipping command : ExecuteEx
      18:05:50.368 2    Skipping command : If
      18:05:50.368 2    Skipping command : If
      18:05:50.368 2    Skipping command : ExitProcEx

       

      18:05:50.384 2    -> Set('exitcode','0')

       

      18:05:50.384 2    -> ExecuteEx('C:\Program Files (x86)\Common Files\enteo\RepositoryCache\100278\rev\1\Extern$\Firefox Setup 52.8.0esr.exe -ms','exitcode','120')/?/TS

       

      18:05:50.384 1    Evaluating condition "not _exitcode_='0'"
      18:05:50.384 2    Condition FALSE  -> skipping IF part
      18:05:50.400 2    Skipping command : If
      18:05:50.400 2    Skipping command : ExitProcEx

       

      18:05:50.400 2    -> : $BeginReinstallScript

       

      18:05:50.400 2    -> : $BeginUninstallScript
      18:05:50.400 1     xniSetup: Reverting to install mode [2010]

       

      18:05:50.400 2    -> RegSearchFolder('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','DisplayName','Firefox','0','RegReadPath',rsfString+rsfChkFullPath,rsfString+rsfChkFullPath)
      18:05:50.400 2      xniTools: searching for DisplayName ...
      18:05:50.446 2      xniTools: Registry name DisplayName not found.
      18:05:50.446 E    Warning (Module:Main, Severity:0x03): Can't resolve variable RegReadPath

       

      18:05:50.446 2    -> RegReadValueEx('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%RegReadPath%','UninstallString','Uninstall',)
      18:05:50.446 E     Warning (Module:Main, Severity:0x03):

      Couldn´t open registry key 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%RegReadPath% in HKEY_LOCAL_MACHINE'

      Das System kann die angegebene Datei nicht finden. (0x00000002)

       

      18:05:50.446 2    -> ExecuteEx(' -ms','exitcode','120')/?/TS
      18:05:50.446 1     Loading NetInstall Named pipes client (nilsPipe.dll)...
      18:05:50.462 2     nilsPipe: Checking status of NetInstall Service...
      18:05:50.462 2      nilsPipe: Service status OK
      18:05:50.524 2     nilsPipe: Piped installer started..

       

      Im eScript aber:

       

       

      !==============================================

      !- Variables for Uninstallation

      !

      Set('RegistryDisplayName','Mozilla Firefox 52.8.0 ESR (x86 de)')

      Set('UninstallParameter','-ms')

      !

      !==============================================

      !==============================================

      : $BeginUninstallScript

      !==============================================

      !=== Enable for x64 application

      !RegSearchFolder('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','DisplayName','%RegistryDisplayName%','0','RegReadPath',rsfString+reUseX64Hive+rsfChkFullPath,rsfString+reUseX64Hive+rsfChkFullPath)

      !RegReadValueEx('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%RegReadPath%','UninstallString','Uninstall',reUseX64Hive)

      !ExecuteEx('%Uninstall% %UninstallParameter%','exitcode','120')/?/TS

      !If not %exitcode%='0'

      ! If not %exitcode%='3010'

      !  ExitProcEx(Failed,'The Setup %SetupFile% failed with %exitcode%')

      !=== Enable for x86 application

      RegSearchFolder('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall','DisplayName','%RegistryDisplayName%','0','RegReadPath',rsfString+rsfChkFullPath,rsfString+rsfChkFullPath)

      RegReadValueEx('HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\%RegReadPath%','UninstallString','Uninstall',)

      ExecuteEx('%Uninstall% %UninstallParameter%','exitcode','120')/?/TS

      If not %exitcode%='0'

      If not %exitcode%='3010'

        ExitProcEx(Failed,'The Setup %SetupFile% failed with %exitcode%')

      !

       

      Ich verstehe nicht wieso der laut Log nach "Firefox" sucht und nicht nach "Mozilla Firefox 52.8.0 ESR (x86 de)

       

      Die Variable wird woanders nicht nochmal gesetzt. Jemand ne Idee?

       

      Gruß

       

      Alex

        • 1. Re: DSM 2017.1 RegSearchFolder
          SitzRieSe Expert

          Weiß jemand ob der RegSearchFolder Befehl mit Wildcards arbeiten kann und wie die Syntax dazu ist? *Firefox* funktioniert leider nicht.

          • 2. Re: DSM 2017.1 RegSearchFolder
            FrankScholer Master

            Hi Alex,

             

            also zur Syntax: hier mal eine (schon ziemlich alte) Beschreibung: Der Befehl sucht unterhalb eines Registry Keys nach Name und Wert einer Zeichenfolge bzw eines DWORD und liefert als Ergebnis eine Variable zurück. Wenn die Option „Voller Pfad in Variable speichern“ gewählt wird, enthält die Variable den Registry Pfad bis zu dem durch „Parent Index“ bestimmten Key. Wenn die Option „Voller Pfad in Variable speichern“ nicht gewählt wird, enthält die Variable den durch „Parent Index“ indizierten Registry Key.

             

            Und wegen Wildcards: die brauchst du meines Wissens nach garnicht, in deinem Fall einfach nach Firefox suchen...

             

            HTH, Grüße Frank

            • 3. Re: DSM 2017.1 RegSearchFolder
              SitzRieSe Expert

              Hi Frank,

               

              genau das hab ich schon versucht. Er findet nichts wenn ich nach "Firefox" suche. Benutze ich "Mozilla Firefox 52.8.0 ESR (x86 de)" funktioniert es. Ich kann es jetzt nochmal ausprobieren in dem ich den Wert durch eine Variable übergebe, aber ich glaube nicht das das was ändert.

               

              Gruß

               

              Alex

              • 4. Re: DSM 2017.1 RegSearchFolder
                derniwi Master

                Hallo Alex,

                 

                ja, das ist schon merkwürdig. Kannst Du zum Test mal die Variabelninhalte mittels MessageBox ausgeben?

                Ich hätte früher RegSearchFolder auch ganz gut brauchen können, aber da wurde es noch nicht wirklich supported. Und dann war der Befehl auch lange Zeit nicht verwendebar, weil man ihn nicht bearbeiten konnte. Ob man aber mit einem Teilstring arbeiten konnte, kann ich nicht mehr sagen.

                 

                Ich habe mir dann mit einem kleinen PowerShell-Skript beholfen (RegSearch.ps1):

                # In der Registry nach einer Variablen und dem entsprechenden Inhalt suchen.
                # zu suchende Variable
                $searchForName  = Get-NiVar "_searchForName"
                # zu suchender Wert
                $searchforValue = Get-NiVar "_searchForValue"
                # zu durchsuchender Pfad
                $searchforPath = Get-NiVar "_searchForPath"
                $return = (Get-ChildItem $searchforPath | Get-ItemProperty | where {$_.$searchForName -match $searchForValue })
                if($return) {
                 $return = $return.PSpath | Convert-Path
                 if($return) {
                  Set-NiVar "_regpath" $return
                 }
                }
                

                 

                Und im eScript dann wie folgt aufrufen:

                Set('_regPath','')
                Set('_searchForName','DisplayName')
                Set('_searchForValue','CDBurnerXP')
                Set('_searchForPath','HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall')
                CallScript('.\Extern$\RegSearch.ps1','')/x64/TS
                MsgBox
                 Pfad: %_regpath%
                EndProc
                

                 

                Vielleicht hilft Dir das weiter...

                 

                Gruß

                Nils

                • 5. Re: DSM 2017.1 RegSearchFolder
                  SitzRieSe Expert

                  Hi Nils,

                   

                  danke für die Antwort! Das Skript kannte ich schon und hab ich jetzt tatsächlich auch so gelöst. Schöner wärs gewesen wenn ich es nativ über DSM hätte lösen können, aber so funktioniert es auch. Ich habe das jetzt nämlich in unser eScript Template aufgenommen und alle Pakete darauf umgezogen. Hintergrund ist das vorallem aus dem DSM Shop Pakete versucht werden zu deinstallieren. Wenn das APM aber die Programmversion gepatched hat, kam es oft vor das die Deinstallation auf die Nase geht. Mit dem Skript suche ich jetzt nach der Software und führe dann den UninstallString aus oder was halt grade zur Software passt.

                   

                  Gruß

                   

                  Alex