Highlighted
Absent Member.
Absent Member.
262 views

[archive] Registry - receive installed Software

[Migrated content. Thread originally posted on 07 July 2009]

I want to receive the installed Software from registry.

current state of my source is this:


       identification division.
       program-id.      registry.
      *************************************************************
      *                                                           *
      *    Registry auslesen - installierte Software              *
      *                                                           *
      *************************************************************
       author.          David Neidinger.
       date-written.    Juli-2009.
       environment division.
       configuration section.
       special-names.
           decimal-point is comma.
       input-output section.
      ***********************************************************
       file-control.

       data division.
       file section.
      ***********************************************************
       working-storage section.
       78  newline                               value x"0A".

       77  reg-ndx           pic 9(3)            value zeroes.
       77  reg-subkey-n      pic x(255)          value spaces.
       77  reg-subkey-s      pic 9(4)            value 255.
       77  reg-status        pic s9(4)           value zeroes.
       77  reg-handle-k                          usage is unsigned-long.
       77  reg-handle-q                          usage is unsigned-long.
       77  reg-size-q                            usage is unsigned-long.
       77  reg-qname         pic x(255)          value spaces.
       77  reg-qversion      pic x(255)          value spaces.
       77  reg-qcomments     pic x(255)          value spaces.
       77  reg-qdate         pic x(255)          value spaces.
       77  reg-qpublisher    pic x(255)          value spaces.

       78  reg-uninstall                         value
               "Software\Microsoft\Windows\CurrentVersion\Uninstall".

       copy "acugui.def".
      ***********************************************************
       procedure division.
       declaratives.

       end declaratives.
      ***********************************************************
       main section.
           move zeroes to reg-ndx.

      ***  open uninstall path
           call "REG_OPEN_KEY" using  HKEY_LOCAL_MACHINE,
                                      reg-uninstall,
                                      reg-handle-k,
                               giving reg-status.

           if reg-status not = zeroes
              display message box "error open " reg-status
              go to main-finish
           end-if.

       main-loop.
           compute reg-ndx = reg-ndx + 1 end-compute.

      ***  Get # key-name from uninstall path
           call "REG_ENUM_KEY" using  reg-handle-k,
                                      reg-ndx,
                                      reg-subkey-n,
                                      reg-subkey-s,
                               giving reg-status.

           if reg-status not = zeroes
              display message box "error enum " reg-status
                                            " " reg-subkey-n
                                            " " reg-subkey-s
              go to main-finish
           end-if.

      ***  Open Subkey ***
           call "REG_OPEN_KEY" using  reg-handle-k,
                                      reg-subkey-n,
                                      reg-handle-q
                               giving reg-status.

           if reg-status not = zeroes
              display message box "error open subkey " reg-status
              go to main-finish
           end-if.

      ***  Get DisplayName
           call "REG_QUERY_VALUE_EX" using  reg-handle-q,
                                            "DisplayName",
                                            "REG_SZ",
                                            reg-qname,
                                            reg-size-q,
                                     giving reg-status.

           if reg-status not = zeroes
              move "Error"    to reg-qname
              move reg-status to reg-qname(6:)
           end-if.

      ***  Get DisplayVersion
           call "REG_QUERY_VALUE_EX" using  reg-handle-q,
                                            "DisplayVersion",
                                            "REG_SZ",
                                            reg-qversion,
                                            reg-size-q,
                                     giving reg-status.

           if reg-status not = zeroes
              move "Error"    to reg-qversion
              move reg-status to reg-qversion(6:)
           end-if.

      ***  Get Comments
           call "REG_QUERY_VALUE_EX" using  reg-handle-q,
                                            "Comments",
                                            "REG_SZ",
                                            reg-qcomments,
                                            reg-size-q,
                                     giving reg-status.

           if reg-status not = zeroes
              move "Error"    to reg-qcomments
              move reg-status to reg-qcomments(6:)
           end-if.

      ***  Get InstallDate
           call "REG_QUERY_VALUE_EX" using  reg-handle-q,
                                            "InstallDate",
                                            "REG_SZ",
                                            reg-qdate,
                                            reg-size-q,
                                     giving reg-status.

           if reg-status not = zeroes
              move "Error"    to reg-qdate
              move reg-status to reg-qdate(6:)
           end-if.

      ***  Get Publisher
           call "REG_QUERY_VALUE_EX" using  reg-handle-q,
                                            "Publisher",
                                            "REG_SZ",
                                            reg-qpublisher,
                                            reg-size-q,
                                     giving reg-status.

           if reg-status not = zeroes
              move "Error"    to reg-qpublisher
              move reg-status to reg-qpublisher(6:)
           end-if.

           call "REG_CLOSE_KEY" using reg-handle-q.

           display message box "Name: "     reg-qname
                   newline     "Version: "  reg-qversion
                   newline     "Comment: "  reg-qcomments
                   newline     "Date: "     reg-qdate
                   newline     "Publisher: " reg-qpublisher
                   title       reg-subkey-n.

           go to main-loop.

       main-finish.
           call "REG_CLOSE_KEY" using reg-handle-k.

           stop run.

       main-ende.
           exit.
       main-e.
      ***********************************************************


My Problem is at the moment that i get sometime the error 234 in the Status code when i use "REG_QUERY_VALUE_EX", but not always.

In the description from the Library Routines is the error 234 declared


A return status of `234' indicates that the size of the data to be returned in VALUE-DATA exceeds the buffer size specified by the DATA-SIZE parameter.


When i understand this i have the wrong parameter in reg-size-q specified. I moved several values in this field, but i never solved the problem.

- The value-data is always pic x(255) so i moved 255 (bytes) to req-size-q or i am wrong?

David
0 Likes
2 Replies
Highlighted
Absent Member.
Absent Member.

RE: [archive] Registry - receive installed Software

If you move 255 to reg-size-q before every call to REG_QUERY_VALUE_EX, you shouldn't get the error.

After every call to REG_QUERY_VALUE_EX, reg-size-q will contain the number of bytes copied to your data variable.
0 Likes
Highlighted
Absent Member.
Absent Member.

RE: [archive] Registry - receive installed Software

ok, thanks.

I set the value in my tests 1 time to 255 and not every time.
I didn't know that it also returns the size value of the real bytes.

David
0 Likes
The opinions expressed above are the personal opinions of the authors, not of Micro Focus. By using this site, you accept the Terms of Use and Rules of Participation. Certain versions of content ("Material") accessible here may contain branding from Hewlett-Packard Company (now HP Inc.) and Hewlett Packard Enterprise Company. As of September 1, 2017, the Material is now offered by Micro Focus, a separately owned and operated company. Any reference to the HP and Hewlett Packard Enterprise/HPE marks is historical in nature, and the HP and Hewlett Packard Enterprise/HPE marks are the property of their respective owners.