14 Replies Latest reply on Jan 17, 2018 3:18 AM by KaiNitzsche

    RegModifyDWORD geht mal oder auch nicht

    KaiNitzsche Apprentice

      Hallo zusammen.

       

      Da meine grauen Haare immer mehr werden und ich mit einem vermeintlich kleinen Problem nicht weiterkomme, hoffe ich auf eure Hilfe

       

      Ich setze in einem Script einen evtl.. noch nicht vorhandenen Wert, falls vorhanden wird "1" addiert. Den Wert lese ich anschließend aus:

       

      [QUOTE]

      RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','1',mrdwInc)/TS

      RegReadValue('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','_Counter')

      [/QUOTE]

       

      Auf einem Test-PC funktioniert das fehlerfrei:

      [QUOTE]

      08:42:44.498 2        ->  RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','1',mrdwInc)/TS
      08:42:44.498 2         nilsPipe: Executing through IPC : RegModifyDWord
      08:42:44.498 1         nilsPipe: Updating NPI varmap
      08:42:44.499 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.499 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files'
      08:42:44.499 1          RegValue 'CommonFilesDir' resolved as 'C:\Program Files (x86)\Common Files'
      08:42:44.499 1          RegValue 'ProductType' resolved as 'WinNT'
      08:42:44.499 1          RegValue 'CurrentVersion' resolved as '6.3'
      08:42:44.501 1          RegValue 'ProductType' resolved as 'WinNT'
      08:42:44.501 1          RegValue 'CurrentVersion' resolved as '6.3'
      08:42:44.512 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.512 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.512 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.512 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.512 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.513 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      08:42:44.513 1         xniPrxAD: Setting AD based variables
      08:42:44.604 2         nilsPipe: --> Transact called with 18963 bytes data
      08:42:44.605 2         nilsPipe: NPI: -> RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','1',mrdwInc)

      08:42:44.606 2        ->  RegReadValue('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','_Counter')
      08:42:44.606 2         Read value '2' from registry
      08:42:44.606 2        else - Skipping ELSE part
      08:42:44.606 2        Skipping command : RegModifyDWord
      08:42:44.607 2        Skipping command : RegReadValue

      [/QUOTE]

       

      und auf einem zweiten nicht:

      [QUOTE]

      05:44:38.893 2        ->  RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','1',mrdwInc)/TS
      05:44:38.894 2         nilsPipe: Executing through IPC : RegModifyDWord
      05:44:38.894 1         nilsPipe: Updating NPI varmap
      05:44:38.894 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.894 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files'
      05:44:38.894 1          RegValue 'CommonFilesDir' resolved as 'C:\Program Files (x86)\Common Files'
      05:44:38.895 1          RegValue 'ProductType' resolved as 'WinNT'
      05:44:38.895 1          RegValue 'CurrentVersion' resolved as '6.1'
      05:44:38.896 1          RegValue 'ProductType' resolved as 'WinNT'
      05:44:38.897 1          RegValue 'CurrentVersion' resolved as '6.1'
      05:44:38.907 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1          RegValue 'ProgramFilesDir' resolved as 'C:\Program Files (x86)'
      05:44:38.908 1         xniPrxAD: Setting AD based variables
      05:44:39.029 2         nilsPipe: --> Transact called with 18088 bytes data
      05:44:39.031 2         nilsPipe: NPI: -> RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','1',mrdwInc)

      05:44:39.033 2        ->  RegReadValue('HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878','BIOS-MSG','_Counter')
      05:44:39.034 E         Warning (Module:Main, Severity:0x03):
      Couldn´t open registry key 'SOFTWARE\WOW6432Node\NetSupport\MIBRAG\113878 in HKEY_LOCAL_MACHINE'
      Das System kann die angegebene Datei nicht finden. (0x00000002)
      05:44:39.035 2         SWMSRT: //------------| Starting Checking if policies should run for the trigger 'On error'. |------------\\
      05:44:39.035 2         SWMSRT: \\------------| Finished Checking if policies should run for the trigger 'On error'. |------------//
      05:44:39.036 2        else - Skipping ELSE part
      05:44:39.036 2        Skipping command : RegModifyDWord
      05:44:39.037 2        Skipping command : RegReadValue

      [/QUOTE]

       

      Mir ist nun nicht klar, warum es einmal klappt und einmal nicht.

       

       

      Vielen Dank euch!

      Kai

        • 1. Re: RegModifyDWORD geht mal oder auch nicht
          SitzRieSe Expert

          Vielleicht AV Schutz? McAfee zum Beispiel hat diverse Mechanismen um Änderungen in der Registry zu verhindern.

           

          Gruß

           

          Alex

          • 2. Re: RegModifyDWORD geht mal oder auch nicht
            _Mel_ Master

            ist das zweite vielleicht ein 32 bit OS ?

            jedenfalls würde ich das WOW6432Node weglassen. um zu steuern ob man den 32 oder den 64 bit teil der registry nutzen will gibt's die checkbox

            • 3. Re: RegModifyDWORD geht mal oder auch nicht
              KaiNitzsche Apprentice

              @Alexander_Pelz: Eigentlich hatte ich bisher keine Probleme, kann ich aber vorsichtshalber mal gegentesten.

               

              /Edit: Ich habe eben mal probiert, auch ohne AV kann er den Reg-Eintrag nicht schreiben

               

               

              @Mel: Beides Enterprise 64Bit. Ich hatte ja nicht das ganze Script eingestellt, aber genau davor wird nach "if IsRunningOnX64" gefiltert.

               

               

              Viele Grüße

              Kai

              • 4. Re: RegModifyDWORD geht mal oder auch nicht
                _Mel_ Master

                was steht denn auf den beiden rechnern jeweils in dem registrywert ?

                und schau mal was im npi logfle steht; nicht alles was da geloggt  wird landet auch im installer log

                • 5. Re: RegModifyDWORD geht mal oder auch nicht
                  night Apprentice

                  Hallo Kai,

                   

                  du sagst ja das der Wert eventuell nicht vorhanden ist. Laut den Parametern des RegModifyDWord hast du aber ausgewählt, dass dein Wert zu einem existierendem hinzugefügt wird.

                   

                  mrdwIcn =  Add value to existing value

                  mrdwSet =  Set Value (da müsste der Wert auch angelegt wenn nicht vorhanden)

                   

                  Gruß Frank

                  • 6. Re: RegModifyDWORD geht mal oder auch nicht
                    KaiNitzsche Apprentice

                    Ich war der Meinung das "Add" auch einen nicht vorhandenen Wert anlegt. Das suggeriert IMHO ja die Beschreibung "Wert zu evtl. vorhandenem addieren".

                     

                    Ich habe gestern noch einiges durchprobiert und habe es irgendwie geschafft das es funktioniert. Auf 6 Testmaschinen wurde der vorher nicht vorhandene Wert geschrieben und auch erfolgreich gelesen. Ich vermute das es was mit den 32/64Bit-Pfaden zu tun hat. Ich habe die 64Bit-Prüfung rausgenommen und schreibe nun direkt unter HKLM\Software

                     

                    RegModifyDWord('HKEY_LOCAL_MACHINE\SOFTWARE\MIBRAG_INSTALL\113878','BIOS_MSG','1',mrdwInc)/TS

                    RegReadValue('HKEY_LOCAL_MACHINE\SOFTWARE\MIBRAG_INSTALL\113878','BIOS_MSG','_Counter')

                     

                    Viele Grüße

                    Kai

                    • 7. Re: RegModifyDWORD geht mal oder auch nicht
                      derniwi Master

                      Hallo Kai,

                       

                      ich bin da vielleicht etwas pingelig, aber habe vor vielen Jahren angefangen zu programmieren. Ich prüfe, ob der Registry-Eintrag besteht, wenn ja, lese ich ihn aus oder verändere ihn. Besteht er nicht, würde ich ihn anlegen. Mag sein, dass meine Vorgehensweise in der heutigen Zeit und bei der Funktionialität durch eScript eigentlich nicht notwendig ist, aber so bin ich bisher gut gefahren.

                      Das wäre dann auch jetzt mein Vorschlag.

                       

                      Ein anderer Gedanke wäre, dass der Typ nicht paßt, also dort evtl. ein REG_SZ mit diesem Namen vorhanden ist.

                       

                      Gruß

                      Nils

                      • 8. Re: RegModifyDWORD geht mal oder auch nicht
                        KaiNitzsche Apprentice

                        Hi.

                         

                        Ja, da hast du sicherlich recht, das wäre der bessere Weg. Zwischenzeitlich war das Problem auch mit den neuen Pfaden erneut aufgetreten, ich hätte am liebsten in die Tischplatte gebissen. Da ich aber zwischen den Feiertagen auf Arbeit war und das Telefon da netterweise deutlich weniger klingelt, konnte ich nach gründlicher Analyse den Fehler finden. Der sitzt doch wie so oft vor dem Bildschirm.

                         

                        Es handelt sich um einen Teil aus meinem BIOS-Upgrade-Script für Dell-PCs. Dabei lese ich die aktuelle Version aus der Registry aus, lösche das "A" aus der Versionsnummer weg (bspw. "A12" -> "12") und speichere mir den Wert zur weiteren Verwurstung in der Registry zwischen. Wie sich herausgestellt hat, funktioniert das bei unseren älteren Reihen (OptiPlex 7010 und OptiPlex 9020) prima. Die Probleme tauchten nur bei der neueren Reihe OptiPlex 5040 auf. Hier war doch Dell so nett und hat die bisher gültigen Bezeichnungen über den Haufen geworfen und nennt diese bspw. 1.7.1. Das führt natürlich zu dem Problem, das das DSM eine Zahl mit einem "." in die Registry als DWORD-Wert schreiben will, was in die Hose geht, einem aber aus dem Log nicht direkt ersichtlich ist. Daher schreibe und lese ich nun MultiSZ-Werte und siehe da, es funktioniert.

                         

                        Ich wünsch euch was

                        und hoffe das ihr auch anno 2018 so geduldig mit mir seid

                         

                         

                        Viele Grüße

                        Kai

                        • 9. Re: RegModifyDWORD geht mal oder auch nicht
                          thertkorn1 Apprentice

                          Schau die mal

                          DSM_2016.2.R2_Patch_3851.zip

                           

                          da wurde einiges mit Registry Befehlen gefixt. Nur zu info...

                          • 10. Re: RegModifyDWORD geht mal oder auch nicht
                            KaiNitzsche Apprentice

                            Wir sind aktuell noch auf 2016.2 R2 und machen kommende Woche das Update auf 2017. Hoffentlich wird es besser. Irgendwie ist zur Zeit der Wurm drin.

                             

                             

                            Mal der Anfang von meinem BIOS-Update-eScript:

                            !Starting Installation:

                            Set('_target_bios','1.0.29')

                            Set('_package_id','%CurrentPackage.Base.Id%')

                            Set('_biosfile','Latitude_5175_Latitude_5179_1.0.29.exe')

                            Set('Win32_BatteryStatus','0')

                            !aktuelle BIOS-Version bestimmen und auf Bitlocker prüfen

                            RegReadValue('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS','BIOSVersion','_current_bios')

                            RegModifyMultiSz('HKEY_LOCAL_MACHINE\SOFTWARE\MIBRAG_INSTALL\%_package_id%','CURRENT_BIOS',rmmsSet,'')

                            %_current_bios%

                            EndProc/TS

                            If %_current_bios%>='%_target_bios%'

                             

                             

                             

                            Im Log sieht das Ergebnis so aus:

                             

                            06:59:01.425 2        ---->Starting installation of "Dell Latitude 2-in-1 5175 - BIOS-Update v1.0.29"

                            06:59:01.428 2        -> Set('_target_bios','1.0.29')

                            06:59:01.430 2        -> Set('_package_id','114339')

                            06:59:01.431 2        -> Set('_biosfile','Latitude_5175_Latitude_5179_1.0.29.exe')

                            06:59:01.432 2        -> Set('Win32_BatteryStatus','0')

                            06:59:01.434 2        -> RegReadValue('HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS','BIOSVersion','_current_bios')
                            06:59:01.435 2         Read value '1.0.26' from registry

                            06:59:01.436 2        -> RegModifyMultiSz('HKEY_LOCAL_MACHINE\SOFTWARE\MIBRAG_INSTALL\114339','CURRENT_BIOS',rmmsSet,'') ... /TS
                            06:59:01.437 E         Warning (Module:Main, Severity:0x03): Couldn´t read regvalue CURRENT_BIOS
                            Das System kann die angegebene Datei nicht finden. (0x00000002)
                            06:59:01.438 2         SWMSRT: //------------| Starting Checking if policies should run for the trigger 'On error'. |------------\\
                            06:59:01.438 2         SWMSRT: \\------------| Finished Checking if policies should run for the trigger 'On error'. |------------//
                            06:59:01.438 E         Warning (Module:Main, Severity:0x03): Couldn´t read regvalue CURRENT_BIOS
                            Das System kann die angegebene Datei nicht finden. (0x00000002)
                            06:59:01.439 2         SWMSRT: //------------| Starting Checking if policies should run for the trigger 'On error'. |------------\\
                            06:59:01.440 2         SWMSRT: \\------------| Finished Checking if policies should run for the trigger 'On error'. |------------//

                            06:59:01.440 1        Evaluating condition "__current_bios_>='__target_bios_'"
                            06:59:01.441 2        Condition FALSE  -> skipping IF part
                            06:59:01.441 2        Skipping command : RegDeleteKey
                            06:59:01.441 2        Skipping command : ExitProcEx
                            06:59:01.442 2        else - Entering ELSE part

                             

                            Lt. Dokumentation soll RegModifyMultiSz einen nicht vorhandenen Schlüssel anlegen können?! Scheinbar macht er das aber nicht oder übersehe ich da was?

                             

                             

                            Danke Kai

                            • 11. Re: RegModifyDWORD geht mal oder auch nicht
                              derniwi Master

                              Hallo,

                               

                              existiert denn der Pfad?

                              HKEY_LOCAL_MACHINE\SOFTWARE\MIBRAG_INSTALL\%_package_id%

                               

                              Diesen prüfen und ggfs. anlegen?

                               

                              Gruß

                              Nils

                              • 12. Re: RegModifyDWORD geht mal oder auch nicht
                                KaiNitzsche Apprentice

                                Der existiert nicht, ich hatte es so interpretiert das dieser erzeugt wird wenn dieser nicht vorhanden. Merkwürdigerweise hat genau dieses ja auch schon funktioniert. Aber gut, dann ändere ich das mal und schaue ob das dann zuverlässiger funktioniert.

                                 

                                 

                                Danke Kai

                                • 13. Re: RegModifyDWORD geht mal oder auch nicht
                                  derniwi Master

                                  Hallo Kai,

                                   

                                  ich kann in der Beschreibung von DSM 2017 nicht erkennen, dass ein nicht vorhandener Schlüssel erstellt werden soll.

                                   

                                  Ein nicht vorhandener Wert wird angelegt.

                                   

                                  Gruß

                                  Nils

                                  • 14. Re: RegModifyDWORD geht mal oder auch nicht
                                    KaiNitzsche Apprentice

                                    So gesehen hast du natürlich absolut recht!

                                     

                                     

                                    Danke Kai