text: embodiments of the present invention will now be described with reference to the figures . referring to fig1 - 2b , a system 100 and method 200 provide an exemplary implementation for performing software discovery by an installer controller . fig1 is a block diagram illustrating an exemplary embodiment of a system 100 for performing software discovery by an installer controller . the networked system 100 includes a software asset management server ( sam ) server 102 . the sam server 102 may also be connected to other computers and servers via a network 130 . in general , the network 130 may be a telecommunications network and / or a wide area network ( wan ). in a particular embodiment , the network 130 is the internet . the sam server 102 generally includes a processor 104 connected via a bus 120 to a memory 106 , a network interface device 118 , a storage 114 , an input device 122 , and an output device 124 . the sam server 102 is generally under the control of an operating system 108 , such as for example linux . more generally , any operating system supporting the functions disclosed herein may be used . the processor 104 is included to be representative of a single cpu , multiple cpus , a single cpu having multiple processing cores , and the like . similarly , the memory 106 may be a random access memory . while the memory 106 is shown as a single identity , it should be understood that the memory 106 may comprise a plurality of modules , and that the memory 106 may exist at multiple levels , from high speed registers and caches to lower speed but larger dram chips . the network interface device 118 may be any type of network communications device allowing the sam server 102 to communicate with other computers via the network 130 . the storage 114 may be a persistent storage device . although the storage 114 is shown as a single unit , the storage 114 may be a combination of fixed and / or removable storage devices , such as fixed disc drives , solid state drives , floppy disc drives , tape drives , removable memory cards or optical storage . the memory 106 and the storage 114 may be part of one virtual address space spanning multiple primary and secondary storage devices . the input device 122 may be any device for providing input to the sam server 102 . for example , a workstation configured with a keyboard and / or a mouse may be used . a sam administrator may use the input device 122 to manage the operations of the sam server 102 . the output device 124 may be any device for providing output to a user of the sam server 102 . for example , the output device 124 may be any conventional display screen or set of speakers . additionally , the output device 124 may be a printer to which the sam administrator may send reports relating to software inventory . although shown separately from the input device 122 , the output device 124 and input device 122 may be combined . for example , a display screen with an integrated touch - screen may be used . as shown , the memory 106 of the sam server 102 includes sam application modules 110 configured to manage the inventory contained in one or more software inventory databases 115 , contained in the storage 114 of the sam server 102 . each software inventory database 115 may store data used by the sam server 102 to manage a software inventory catalog for business enterprise &# 39 ; s computing environment . in an exemplary embodiment as shown , the memory 106 of sam server 102 also contains dbms modules 112 where a dbms is associated with the sam server 102 for the storage and management of the software inventory database ( s ) 115 . a client workstation 125 is shown communicating with the sam server through a network 130 . software modules , such as a sam agent 126 and an installer controller 127 may be installed on the client workstation 125 to facilitate software inventory management from the sam server 102 . the particular description in fig1 is for illustrative purposes only ; it should be understood that the invention is not limited to specific described embodiments , and any combination is contemplated to implement and practice the invention . referring now to fig2 a , the reference numeral 200 generally designates a flow diagram illustrating an overview of an exemplary embodiment of a method for performing software discovery by an installer controller from a client workstation &# 39 ; s perspective . at 205 , an end - user who wishes to install a software package on a client workstation 125 , may access the software package by , for example , downloading it from a repository across a network or by mounting a device containing the software on the client workstation 125 . the installer controller 127 may be configured to recognize a variety of software installer programs and their processes , such that when a process that is associated with one of these program ( e . g ., rpm for linux or installshield for windows ) starts executing , the installer controller 127 recognizes that the end - user has invoked the software installer program , for example to update , install or otherwise modify software on the client workstation 125 . when the installer controller 127 recognizes , at 210 , that a newly invoked process is a software installer program , the installer controller 127 , through the sam agent 126 on the client workstation 125 , communicates with the sam server 102 at 215 ( fig2 b ) to query whether a signature corresponding to the software package being provided by the software installer is contained in the inventory of the sam server 102 . in general , a signature may include a file name , a version identifier , an executable name , a registry entry , or other types of information which can be used to uniquely identify a given software item . either alone or in conjunction with the sam agent 126 , the installer controller 127 may interrogate the proposed software package and extract signature - related information . the extracted signature - related information may be used in querying the sam server 102 inventory to determine whether , at 220 , a matching signature may be found . where at 220 a matching signature is found , indicating that the status of the proposed software package is “ known ” then the installer controller 127 may allow the software installer to continue with the software installation at 240 without interruption . the sam administrator may approve software and mark it as “ known ” when , for example , the sam administrator wants to continue to discover and maintain the software in the sam - managed environment . however , the sam administrator may reject the software but still mark it as “ known ” when , for example , the sam administrator does not want to continue to discover and maintain the software in the sam - managed environment . if at 220 a matching signature is not found , indicating that the proposed software package is “ unknown ” ( i . e ., is not approved and does not exist in the sam server 102 inventory ), then the installer controller 127 may suspend execution of the software installer program at 225 . the end - user is then prompted at 230 to input details about the software being installed , such as a vendor name , a source , a version , and a purpose for its use . the installer controller 127 may repeatedly prompt the end - user until the required information is entered , or alternatively , end the execution of the software installer program . when the end - user enters the required information , then at 235 the installer controller 127 resumes the software installer and monitors the progress of the installation at 240 . if the installation fails , the end - user may wish to troubleshoot and run the software installer again . however , when the installation completes at 245 , the installation controller 127 may report to the sam server 102 , or other entity designated for data collection , the data input by the end - user , the raw inventory gathered during the installation , such as for example files that were created or changed on the client workstation 125 , new registered services , and system registry entries . a return code corresponding to a completion status may also be included . the installation controller 127 may also process a software uninstaller similar to the processing of an installer program . for example , the uninstaller process may be suspended when the software package is unknown , and the end - user may be prompted to enter input details about the software being installed , such as a vendor name , a source , a version , and a purpose for its use . the collected input details , raw inventory data , and return code corresponding to a completion status may be reported to the sam server 102 , or other entity designated for data collection . similarly , if the end - user is installing a patch or update , then even though the software package is currently installed on the client workstation 125 , the different release levels may have different hash values in the signature . therefore , the installer controller 127 may follow the path of processing as if the software is unknown , prompting the end - user to input details , and reporting the collected input details , raw inventory data and return code to the sam server 102 or other entity designated for data collection . referring now to fig2 b , an exemplary embodiment of a method for performing software discovery by an installer controller is shown from a sam system &# 39 ; s perspective . at 250 the raw inventory data collected by the installer controller 127 may be received at the sam server 102 . like entries are grouped together ( e . g ., vendor , version , software package name ) at 255 and reported for the sam administrator to evaluate at 260 . based on the number of occurrences in the sam environment , the sam administrator may approve a software package to be included and maintained in the sam software catalog . at 265 , the sam administrator may review the raw inventory reports prepared by the sam server 102 to determine if there is enough information to make an evaluation about the software package &# 39 ; s approval status . in one scenario , the software may be of interest . perhaps a few end - users have installed it but they gave incorrect or incomplete data when prompted by the installer controller 127 . in that case , at 285 the sam administrator may mark the software as “ unknown ” in the sam server 102 . end - users may still install the software package , but with a status of “ unknown ” the installer controller 127 will still prompt end - users for input . where there is enough information to make an evaluation about a particular software package , the sam administrator may then decide that the software package should be included and maintained in the sam software catalog . in that case , at 275 the sam administrator may approve the software package , and it will be marked as “ known ”. the sam server 102 may then generate a signature and a software catalog entry corresponding to the approved software package . in the future , end - users may install the software package without being prompted for input by the installer controller 127 . however , at 280 the sam administrator may decide to reject the software package if it is something that should not be added to the software catalog . in this case , the sam administrator may still mark the software as “ known ”. the installer controller 127 will not generate a signature or a software catalog entry , but in the future end - users may install the software package without being prompted for input by the installer controller 127 . once approved , the gathered raw inventory data may be used to automatically create a software discovery signature that may be added to the software catalog on the sam server 102 , and that also may be propagated back to the sam agents 126 on client workstations 125 . software monitoring and discovery may be dynamically managed on the client workstations 125 through the installer controller 127 in conjunction with the sam agent 126 . for example , a new or missing registry entry , or a new running process may indicate a change to the software environment on the client workstation 125 . when the installer controller 127 detects one these events , a change to the software inventory is begun by prompting the end - user for information about the software that triggered the event , in a similar manner to the software discovery process beginning in 205 ( fig2 a ). the resulting gathered raw inventory data may be reported to the sam server 102 to update the software catalog , and generate an updated software discovery signature on the client workstation 125 . an installer controller 127 working in conjunction with the sam agent 126 may reduce unnecessary network traffic , since regularly scheduled scans of client workstations 125 may be avoided . additionally , having the software discovery signatures on the client workstations 125 may tend to de - centralize software inventory management since , although local copies of the software catalog are not needed , a software catalog customized for the environment is provided automatically . referring now to fig3 , computing device 300 may include respective sets of internal components 800 and external components 900 . each of the sets of internal components 800 includes one or more processors 820 ; one or more computer - readable rams 822 ; one or more computer - readable roms 824 on one or more buses 826 ; one or more operating systems 828 ; one or more software applications ( e . g ., sam modules 829 ) executing the method 200 ; and one or more computer - readable tangible storage devices 830 . the one or more operating systems 828 and sam modules 829 are stored on one or more of the respective computer - readable tangible storage devices 830 for execution by one or more of the respective processors 820 via one or more of the respective rams 822 ( which typically include cache memory ). in the embodiment illustrated in fig3 , each of the computer - readable tangible storage devices 830 is a magnetic disk storage device of an internal hard drive . alternatively , each of the computer - readable tangible storage devices 830 is a semiconductor storage device such as rom 824 , eprom , flash memory or any other computer - readable tangible storage device that can store a computer program and digital information . each set of internal components 800 also includes a r / w drive or interface 832 to read from and write to one or more computer - readable tangible storage devices 936 such as a cd - rom , dvd , ssd , memory stick , magnetic tape , magnetic disk , optical disk or semiconductor storage device . each set of internal components 800 may also include network adapters ( or switch port cards ) or interfaces 836 such as a tcp / ip adapter cards , wireless wi - fi interface cards , or 3g or 4g wireless interface cards or other wired or wireless communication links . the sam 829 and operating system 828 that are associated with computing device 300 , can be downloaded to computing device 300 from an external computer ( e . g ., server ) via a network ( for example , the internet , a local area network , or other wide area network ) and respective network adapters or interfaces 836 . from the network adapters ( or switch port adapters ) or interfaces 836 and operating system 828 associated with computing device 300 are loaded into the respective hard drive 830 and network adapter 836 . the network may comprise copper wires , optical fibers , wireless transmission , routers , firewalls , switches , gateway computers and / or edge servers . each of the sets of external components 900 can include a computer display monitor 920 , a keyboard 930 , and a computer mouse 934 . external components 900 can also include touch screens , virtual keyboards , touch pads , pointing devices , and other human interface devices . each of the sets of internal components 800 also includes device drivers 840 to interface to computer display monitor 920 , keyboard 930 and computer mouse 934 . the device drivers 840 , r / w drive or interface 832 and network adapter or interface 836 comprise hardware and software ( stored in storage device 830 and / or rom 824 ). as will be appreciated by one skilled in the art , aspects of the present disclosure may be embodied as a system , method or computer program product . accordingly , aspects of the present disclosure may take the form of an entirely hardware embodiment , an entirely software embodiment ( including firmware , resident software , micro - code , etc .) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “ circuit ,” “ module ” or “ system .” furthermore , aspects of the present disclosure may take the form of a computer program product embodied in one or more computer readable medium ( s ) having computer readable program code embodied thereon . any combination of one or more computer readable medium ( s ) may be utilized . the computer readable medium may be a computer readable signal medium or a computer readable storage medium . a computer readable storage medium may be , for example , but not limited to , an electronic , magnetic , optical , electromagnetic , infrared , or semiconductor system , apparatus , or device , or any suitable combination of the foregoing . more specific examples ( a non - exhaustive list ) of the computer readable storage medium would include the following : an electrical connection having one or more wires , a portable computer diskette , a hard disk , a random access memory ( ram ), a read - only memory ( rom ), an erasable programmable read - only memory ( eprom or flash memory ), an optical fiber , a portable compact disc read - only memory ( cd - rom ), an optical storage device , a magnetic storage device , or any suitable combination of the foregoing . in the context of this document , a computer readable storage medium may be any tangible medium that can contain , or store a program for use by or in connection with an instruction execution system , apparatus , or device . a computer readable signal medium may include a propagated data signal with computer readable program code embodied therein , for example , in baseband or as part of a carrier wave . such a propagated signal may take any of a variety of forms , including , but not limited to , electro - magnetic , optical , or any suitable combination thereof . a computer readable signal medium may be any computer readable medium that is not a computer readable storage medium and that can communicate , propagate , or transport a program for use by or in connection with an instruction execution system , apparatus , or device . program code embodied on a computer readable medium may be transmitted using any appropriate medium , including but not limited to wireless , wireline , optical fiber cable , rf , etc ., or any suitable combination of the foregoing . computer program code for carrying out operations for aspects of the present disclosure may be written in any combination of one or more programming languages , including an object oriented programming language such as java , smalltalk , c ++ or the like and conventional procedural programming languages , such as the “ c ” programming language or similar programming languages , a scripting language such as perl , vbs or similar languages , and / or functional languages such as lisp and ml and logic - oriented languages such as prolog . the program code may execute entirely on the user &# 39 ; s computer , partly on the user &# 39 ; s computer , as a stand - alone software package , partly on the user &# 39 ; s computer and partly on a remote computer or entirely on the remote computer or server . in the latter scenario , the remote computer may be connected to the user &# 39 ; s computer through any type of network , including a local area network ( lan ) or a wide area network ( wan ), or the connection may be made to an external computer ( for example , through the internet using an internet service provider ). aspects of the present disclosure are described with reference to flowchart illustrations and / or block diagrams of methods , apparatus ( systems ) and computer program products according to embodiments of the disclosure . it will be understood that each block of the flowchart illustrations and / or block diagrams , and combinations of blocks in the flowchart illustrations and / or block diagrams , can be implemented by computer program instructions . these computer program instructions may be provided to a processor of a general purpose computer , special purpose computer , or other programmable data processing apparatus to produce a machine , such that the instructions , which execute via the processor of the computer or other programmable data processing apparatus , create means for implementing the functions / acts specified in the flowchart and / or block diagram block or blocks . these computer program instructions may also be stored in a computer readable medium that can direct a computer , other programmable data processing apparatus , or other devices to function in a particular manner , such that the instructions stored in the computer readable medium produce an article of manufacture including instructions which implement the function / act specified in the flowchart and / or block diagram block or blocks . the computer program instructions may also be loaded onto a computer , other programmable data processing apparatus , or other devices to cause a series of operational steps to be performed on the computer , other programmable apparatus or other devices to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide processes for implementing the functions / acts specified in the flowchart and / or block diagram block or blocks . the flowchart and block diagrams in fig1 - 3 illustrate the architecture , functionality , and operation of possible implementations of systems , methods and computer program products according to various embodiments of the present disclosure . in this regard , each block in the flowchart or block diagrams may represent a module , segment , or portion of code , which comprises one or more executable instructions for implementing the specified logical function ( s ). it should also be noted that , in some alternative implementations , the functions noted in the block may occur out of the order noted in the figures . for example , two blocks shown in succession may , in fact , be executed substantially concurrently , or the blocks may sometimes be executed in the reverse order , depending upon the functionality involved . it will also be noted that each block of the block diagrams and / or flowchart illustration , and combinations of blocks in the block diagrams and / or flowchart illustration , can be implemented by special purpose hardware - based systems that perform the specified functions or acts , or combinations of special purpose hardware and computer instructions .