METHOD AND SYSTEM FOR IDENTIFYING AND RESOLVING SOFTWARE CONFLICTS AND COMPUTER-READABLE STORAGE MEDIUM HAVING A PROGRAM FOR EXECUTING THE METHOD

Information

  • Patent Application
  • 20030014381
  • Publication Number
    20030014381
  • Date Filed
    November 11, 1998
    27 years ago
  • Date Published
    January 16, 2003
    23 years ago
Abstract
Method and system for managing software conflicts and a computer-readable storage medium having a program for executing the method is provided wherein a database of interrelated tables is utilized. The invention may be used to manage file and registry conflicts on Windows desktops. The invention determines information about changes made by applications during their installation into a computer system, one application at a time. Those changes are then compared to determine which files and other shared resources conflict with one another. This conflict information is then used to attempt to resolve software conflicts. Conflicts can be identified at many different levels: files, registries, shortcuts, ODBC drivers, ODBC data sources, service, device, components, autoexec.bat, config.sys, INI changes, and paths. This invention stores all information needed to recreate the installation in the database itself. Thus, when changes (i.e. when conflicts between multiple applications are being resolved) are made to the database, a needed installer for that application can be generated. The database categorizes all file types and breaks the information down into manageable tables of information. These tables relate to each other in an intricate web that allows a thorough illustration of files.
Description


TECHNICAL FIELD

[0001] This invention relates to methods and systems for managing software conflicts and computer-readable storage medium having a program for executing the method and, in particular, to methods and systems for managing software conflicts and computer-readable storage medium having a program for executing the method utilizing a database of interrelated tables.



BACKGROUND ART

[0002] With the power of today's application development tools, a developer can create a custom application more quickly than ever. However, there is a significant hurdle getting those applications to the desktop due to file and other shared resource conflicts.


[0003] Software conflicts oftentimes arise when multiple software applications modify a shared resource such as a file, registry key, or icon that is being used by another application that is installed on the same computer.


[0004] Anyone managing the distribution of applications to users has very likely experienced what is commonly referred to as “DLL Hell.” Simply put, DLL hell occurs when one program disables others by installing an incompatible dynamic link library, or DLL, file. This corrupts one's system in one of two ways. In the first instance, an application installs an older DLL over a newer one. The second instance occurs when a newer DLL is properly installed but an application won't work with the new version. In addition, other non-file system resources such as the registry, icons, or system services may be replaced with incompatible versions.


[0005] Independent software vendors distribute the DLLs and other support files they've tested during development. However, newer support files that already exist on the destination computer may already have superseded these by the time users load them.


[0006] In theory, a vendor's installation routine should double-check to see if a newer version of a shared DLL is already on the target system. Yet vendors have been sloppy or overly cautious about this. On the sloppy side of the equation, some installation routines simply don't check for existing DLLs. In the interest of caution, though, some vendors intend to copy the specific DLL that they've tested, which gives them some cause for confidence. Copying older DLL versions means the newly installed application will work, but applications that rely on later versions of the DLL are now more likely to encounter problems.


[0007] Even if the newer version of the shared component copies over older versions there can be problems. It is not always the case that an updated version of a shared component will be completely backward compatible.


[0008] In addition, the version information associated with shared files is not always accurate. In many cases, there are multiple indications of the version of a file. The last date/time the file was modified can be used to indicate the version of the file. In addition, many files include one or more internal version numbers. Problems occur when the different version numbers for a file are in error or disagree with each other.


[0009] The file system namespace readily allows collisions. Vendors currently tend to throw many of their support files into a common directory such as the System directory. Further, even though Microsoft's 32-bit OSes allow long filenames, most vendors stick to the 8.3 convention; they must if their DLLs are also for 16-bit environments. Plus, their files may someday reside on a shared network drive that supports only short names.


[0010] There are only so many eight-character names—fewer when you use meaningful abbreviations and short words. When two developers use a name like DISPLAY.DLL, conflicts occur.


[0011] End users are often unaware that underlying system-level components have changed. Loading something like an Internet Explorer browser update can update low-level OS components—the lowest-level TCP/IP protocol stack DLLs, for example. There may be no direct relation; Microsoft may have used the update to slipstream a number of OS patches.


[0012] The result is that it becomes harder for vendors to support their products because it is difficult to tell exactly what set of system DLLs any given user has. Developers dislike working in the Microsoft environment right now describing it as a “snake pit” from a support standpoint because they don't know what their customers have.


[0013] This problem has been very difficult to prevent and identify until it is too late, resulting in system failures and significant user downtime. DLLs represent only one of several file conflicts that may occur. Conflicts can also occur at different levels in registry keys, components, paths, and drivers making the problem all the more complex.


[0014] Accordingly, there is a need for an improved method of identifying and resolving file, registry and other shared component conflicts between multiple applications.


[0015] The U.S. Pat. No. to Kullick et al. 5,764,992 provides for a method and apparatus for automatic software replacement. An automated software upgrade method is described which allows a software program to determine if it and its associated programs are the newest versions and to replace themselves if necessary.


[0016] The U.S. Pat. No. to Gerken et al. 5,787,444 provides for a method and apparatus for maintaining revision control of a set of objects within a data processing system. In the context of software revision control, an object oriented method of maintaining control of hierarchically linked data is described.


[0017] The U.S. Pat. No. to Alderson et al. 5,019,963 provides for a data processing network with upgrading of files. A central host is described which maintains a list of files accessible by a remote client and provides the most current version when a client so requests.


[0018] The U.S. Pat. No. to Holmes et al. 5,247,683 provides for a system and method for installing software and updating configuration files. A method of maintaining a system's configuration file is described which automatically determines how to update an existing configuration file to accommodate a new application.


[0019] The U.S. Pat. No. to Halliwell et al. 5,564,051 provides for an automatic update of static and dynamic files at a remote network node in response to calls issued by or for application programs. An application management system is described which identifies and replaces out-of-date files and augments or creates files which are needed.


[0020] The U.S. Pat. No. to Fitzgerald et al. 5,581,764 discloses a distributed computer network including hierarchical resource information structure and a related method of distributing resources.


[0021] The following U.S. Pat. Nos. are also relevant: 4,558,413 to Schmidt et al.; 4,809,170 to Leblang et al.; 5,155,847 to Kirouac et al.; 5,574,898 to Leblang et al.; and 5,603,027 to Ohkami.



DISCLOSURE OF INVENTION

[0022] An object of the present invention is to provide a method and system for managing software conflicts and computer-readable storage medium having a program for executing the method wherein a database of interrelated tables is utilized.


[0023] Another object of the present invention is to provide a method and system for managing software conflicts and computer-readable storage medium having a program for executing the method wherein conflicts are identified before software applications are introduced to a computer system, thus improving user productivity by eliminating system outages and downtime.


[0024] In carrying out the above objects and other objects of the present invention, a method is provided for managing software conflicts. The method includes the step of determining changes made to a computer system's files and other shared resources during installation of at least one application into the computer system to obtain change information. The method includes the step of processing the change information to determine which files and shared resources conflict with one another to obtain conflict information. The method also includes the steps of storing the conflict information in a database of interrelated tables and resolving the software conflicts based on the stored conflict information.


[0025] Further in carrying out the above objects and other objects of the present invention, a computer-readable storage medium having stored therein a program is provided. The program executes the above-noted method steps.


[0026] Yet still further in carrying out the above objects and other objects of the present invention, a system is provided for managing software conflicts in accordance with the above-noted method steps.


[0027] The software conflicts may include file conflicts, registry conflicts, shortcut conflicts, ODBC driver conflicts, ODBC data source conflicts, service conflicts, device conflicts, component conflicts, autoexec.bat conflicts, config.sys conflicts, INI changes conflicts, and path conflicts.


[0028] The benefits accruing to the use of the present invention are numerous. For example, the customer benefits because conflicts are identified before the applications are rolled out onto their desktops. This saves an organization valuable support staff time. It avoids user downtime, and reduces regression testing to those applications that have identified conflicts.


[0029] The above objects and other objects, features, and advantages of the present invention are readily apparent from the following detailed description of the best mode for carrying out the invention when taken in connection with the accompanying drawings.







BRIEF DESCRIPTION OF DRAWINGS

[0030]
FIG. 1 is a schematic view of a computer system including a computer-readable storage medium configured with data which the computer system operates on to carry out the method of the present invention;


[0031]
FIG. 2 is a block diagram flow chart which illustrates an algorithm for determining conflicts on applications running on the computer system of FIG. 1;


[0032]
FIG. 3 is a block diagram flow chart which illustrates an algorithm for determining conflicts on files for a single application;


[0033]
FIG. 4 is a block diagram flow chart which illustrates an algorithm for determining conflicts for a single record in a single application;


[0034]
FIG. 5 is a block diagram flow chart which illustrates an algorithm for analyzing the conflicts determined as a result of using the algorithms of FIGS. 2-4; and


[0035]
FIG. 6 is a block diagram of the tables of a database of the present invention illustrating table lay out and relationships.







BEST MODE FOR CARRYING OUT THE INVENTION

[0036] Referring now to FIG. 1, there is illustrated a computer system, generally indicated at 10, which, when appropriately programmed with computer-readable data encoded in a computer-readable storage medium such as a floppy disk 12, is capable of carrying out the method of the present invention. In general, the present invention is used to import, export, and analyze the changes made by an application to a computer system during its installation. In addition, it is used to compare software applications and determine which files and shared resources conflict with one another. This conflict information is fed into a database that is then used to attempt to resolve software conflicts. The database categorizes all system changes and breaks the information down into manageable tables of information. These tables relate to each other in an intricate web that allows a thorough illustration of all the changes.


[0037] Conflicts can be determined by several methods depending on need. The process is different between running conflicts for all applications (FIG. 2), for a single application (FIG. 3), or for a single file in a single application (FIG. 4). The first step for each variation is to clear old conflicts that exist for the application(s) or item that conflicts that existed for the application(s) or item that conflicts are to be run on. Then the new conflicts are found and stored. Errors and warnings are stored in a conflict table that is associated with the particular item. Informational conflicts are only kept with the item that the conflict occurred for. For example, a file with an informational conflict and an error will have one record in a FileConflict table representing the error and will have its own conflict level representing the error and the informational.


[0038] Referring now to FIG. 2, at block 14, the algorithm tests to determine if conflicts across all applications at one time is to be utilized.


[0039] At block 16, the first step is to delete all record of previous conflicts. The application deletes the records from the conflict tables corresponding to the type of conflicts being run. For file conflicts, all items from the FileConflict table are deleted.


[0040] At block 18, the application sets the individual item records' conflict level to zero. For files, the Conflict column in the Files table is set to zero for all files.


[0041] At block 20, conflicts are marked which have not been run for all applications since, at this point, all traces of conflicts have been deleted and conflicts would need to be rerun if interrupted. This step is done so the user will know what state an application is in.


[0042] At block 22, all records matching a conflict join criteria are found. This step gathers records that are similar enough to possibly conflict. Only system resources of different applications are compared. For files, all files of the same destination filename are gathered and analyzed to determine the new conflicts beginning at block 24. Only files that are executable or reside in common directories such as Windows, Program Files, and System are compared.


[0043] When running conflicts for a single application (FIG. 3), the process result is the same but the steps are different.


[0044] At block 28, all records are found in other applications that currently conflict with files in this application. This is done using the current records in the FileConflict table that contain this application.


[0045] For each record that previously conflicted with files in this application, the record key is stored and its current error level is set to zero, as indicated at block 30. Records are temporarily stored throughout the process and written at the end. During later steps, these error levels are modified to contain the ORed values of all conflicts that occur.


[0046] At block 32, the records are deleted from the conflict table for this application and at block 34 the individual item records conflict level is set to zero for this application. For files, the conflict column in the Files table is set to zero for all files in this application.


[0047] Finally, at block 36, conflicts are marked which have not been run for this application since all traces of conflicts for this application have been deleted. This step is done so the user will know what state an application is in.


[0048] At block 38 all records matching the conflict join criteria are found for records against records in this application. This step gathers records that are similar enough to possibly conflict. For files, all files of the same destination filename as files in this application are gathered in this step and then analyzed beginning at block 40.


[0049] Referring now to FIG. 4, at block 42 it is determined whether to run conflicts for a single record that has been changed. It is first determined whether this record conflicted with other records before the change.


[0050] At block 44, the previous conflict level is determined by looking at the current value of the conflict column for the record. If the record used to conflict before it was changed, at block 44 it is determined if it was an informational conflict and if it changed items that would make it no longer an informational conflict with the same records it had been prior to being changed.


[0051] If so, at block 46, the records are queried that previously were informational conflicts with this one by finding all records that match the old data.


[0052] Each of these records is then stored as being affected by an informational conflict change at block 48. This distinction will be used to later determine whether informational conflicts were completed for the records.


[0053] Depending on the number of records that match the old record, as determined at block 50, different error levels are recorded for these records.


[0054] At block 54, if only one matches it, the error level is zero.


[0055] At block 52, if more than one record matches, they are each still informational conflicts with each other and the error level is set to informational.


[0056] At block 56, this records key is stored and sets its current error level to 0 since all conflicts are recomputed for this record.


[0057] At block 58, each record that previously conflicted with this record is stoked and its current error level is set to 0. These are the records that were either errors or warnings with this record previously. For files, these are records referenced in the FileConflict table for this particular file.


[0058] At block 60, records for this file are deleted from the FileConflict table.


[0059] Finally, at block 62, all records matching the conflict join criteria are found for records against this record. This step gathers records that are similar enough to possibly conflict.


[0060] For files, all files of the same destination filename as this file are gathered and then analyzed beginning at block 64.


[0061] The beginning of the process to determine the new conflicts begins at blocks 22, 38 and 62 when records that could be conflicts are found by matching join criteria for all files, files of a single application, or a single file.


[0062] Referring now to FIG. 5, at blocks 24, 40, 64 (i.e. from FIGS. 2, 3, and 4, respectively), the conflict level between each pair of records that match the join criteria is determined based on other columns in the records. For files, the error level is set to informational initially. If the version, internal version, date/time, or size don't match, and the destination directories match or both files are 16 bit executables, the error level is set to error, otherwise the error level is set to warning.


[0063] At block 66, the error levels from the pair records that conflict are ORed with any stored error levels from previous steps for those records' keys.


[0064] At block 68, it is determined if the error level is an error or warning.


[0065] At block 70, the error in the conflict table is saved. For files, each records' keys are written to the FileConflict table along with the corresponding error level between the two records. This process is repeated for each pair of files found that meet the join criteria as indicated at block 72.


[0066] Blocks 76 through 86, for each record that has been stored as indicated at block 74, deal with the stored error levels that have been ORed together in previous steps. If the stored record is not for this application when computing conflicts for a single application or record, at block 78, conflicts for this record are found against records in applications other than the one running conflicts for. These other conflict levels are ORed together with any stored error levels. These conflicts are found using conflicts with other records in the FileConflict table that match records for other applications.


[0067] If this record was not marked as affected at block 48, at block 82 the record is recorded to see if it has other informational conflicts by reading the current error level of that record. If so, then the error level is ORed with a one. If the record was marked as affected, the algorithm computes informational conflicts for the record at block 24, 40, 64.


[0068] At block 84, the new error level for the record is written to the database. After all stored records have been processed, the application(s) are marked as having had conflicts run.


[0069] The above process is repeated for all item types other than files stored in the database. The only difference is how conflicts are actually determined and which table they are stored in. To determine conflicts for registry records, the join criteria is the registry path and key name columns. An error occurs if the first 255 characters of the value, the datatype, or the operation is different between a pair of records that have the same registry path and key name. ODBC drivers are joined by the driver name and whether they are 16 or 32 bit drivers. After the match is made, each attribute of the driver is compared. If an attribute exists for one driver and not the other, it is recorded as a warning. If two attributes exist, but have different values, those attributes are marked as errors.


[0070] Referring now to FIG. 6, there is illustrated the overall table layout and relationships of a database, generally indicated at 90, that is utilized in the above process. The following information is provided to illustrate how the tables relate to each other.


[0071] In general, most tables in the database utilize a conflict field. Entries that are found to conflict require a conflict level indicator in the conflict field. The indicator displays the severity of the conflict. A value of “0” indicates that no conflict was found. A value of “1” is informational (same item exists for another application, default if the match criteria are met), but Warning and Error Criteria are not met. A value of “2” is a Warning. It could cause problems, but not necessarily severe errors. A value of “4” indicates a Severe Error. This error could cause application malfunction.


[0072] Conflicts between Microsoft Windows Installer components are also tracked. There is a MSIComponent table which contains component information from a Microsoft Windows Installer database for an install. Also, there is an MSIComponent column in the file, registry, ODBCServ, Shortcut, Service, and INIChange tables which is used to determine the component for each of these resources. MSIComponent conflicts occur when identical resources from the above tables are installed using different component GUIDs.


[0073] An Application table 92 supplies each application with a unique number, known as a key, so that the application may be easily identified in other tables. A Package table 94, the Application table's only child, gets its AppKey information from this table 92. The Package table 94 identifies the version of the Application to be compared. All children of the Package table 94 use information supplied by the Application table 92 to identify which data goes with what application.


[0074] The purpose of the Application table 92 is to supply each application with a unique number, known as a key, so that the application may be easily identified in other tables. Each field of the Application table 92 performs a unique function. They are listed in Table 1.
1TABLE 1FieldData TypeDetailsExampleAppKeyIntegerProvides a unique number, also1(pk)known as a key, for each application.3This key is used to identify theapplication in other tables. Anyapplication can be assigned anynumber so long as the number isunique within this table.Application50 CharactersThis is a text field that allows you to(1) Office 97describe the applications to be(3) WordPerfectcompared.


[0075] The Package table 94 is the only child of the Application table 92, and in turn, is a parent to most of the other tables. It lists the package information for each compared application to be used as key data for its children. Where the Application table 92 allows one to assign a key number to each application to be compared, the Package table 94 allows one to assign a key to each version of an application. A package can only exist here if it belongs to one of the applications listed in the Application table 92.


[0076] A package is a sub-unit of an application. There may be no or several packages within an application. Table 2 indicates Package table fields.
2TABLE 2FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has a1 Office 97(pk)unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as its parent identifier.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be compared2 Microsoft Wordfor conflicts.4.0Package50 CharactersThis is the text name of the package.P1, CorelWPSteMaindir255 CharactersThis is the package's main installationOffice 97ScriptLoc255 CharactersOriginal Wise script location for thisC:\Scripts\Office97.packagewseProgfilesLong IntegerIf the file is installed under the0, 1Program Files folder, there will be anindication of 1 in this field. One beingthe “true” indication, 0 being the“false” indication.IGroup50 CharactersIcon Group NameMicrosoftReference, ToolsLogfile255 CharactersThe directory and name of a file% MAINDIR%\generated during the packagesOffice97\installation. This file is commonlyINSTALL.LOGused during the package'suninstallation procedure.ItemMaskLong IntegerThis field is a series of bit masks,1031with up to 32 different masks1055possible. Items in this field may becombined.


[0077] An AutoExec table 96 is a child of the Package table 94. Its function is to house detailed information about the changes made to the Autoexec.bat. For an entry to exist in this table 96, it must first belong to a package (located in the Package table 94). It is from this package that the AppKey and PackKey information is obtained, along with the data for the detail fields.


[0078] Entries that are found to conflict require a Conflict Level indication in the Conflict field. The specific information housed by the AutoExec table 96 and details about each column are listed in Table 3 below.
3TABLE 3FieldData TypeDetailsExampleAppKeyIntegerIn the case of this table, as well as1 Office 97(pk)all other children of the Package3 WordPerfecttable, this field contains one of theparent designators. In this case, theAppKey is used to indicate that thedata in this row belongs to a certainapplication; the applicationassociated with that particularnumber.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0AutoKeyIntegerThis number establishes the1(pk)AutoExec table as a unique child of2the Package table. The numbers inthis field represent particular changesthat have occurred to theautoexec.bat. Each change is uniqueand is therefore assigned a uniquenumber for identification purposes.Path255 CharactersThe path that leads to the commandC:\DOSto runCommand255 CharactersThis is the actual command to runprompt, mscdexthe fileOptions255 CharactersCommand line options$p$gSearchText255 CharactersThe data that appears in this columnis Wise-specific. It indicates the textto search for when insertinginformation into the Wise program.Comment255 CharactersThis is the user's comment about thechange that occurred to theautoexec.bat fileLineLong IntegerThe number of the line within42AutoExec.bat that was modified.FlagsLong IntegerThere are three flags used in this1, 2, 4table. Each indicates a differentsearch option.Component128Represents a change to a componentMicrosoft Excel is aof a program. This field contains theprogram and Help iscomponent string for reference to theone of itscomponent table. Currently, thiscomponentsfield pertains to changed files only.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.An Error needs to be indicated inthis field if there is a discrepancy onthe command line match. Errorsresult if there is a discrepancy inPath or Options.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0079] An AddPath table 98 is a child of the Package table 94. Its function is to house detailed information about all paths for all compared applications. For a path entry to exist in this table 98, it must first belong to a package (located in the Package table 94). It is from this package that the AppKey and PackKey identifiers are found, along with other data for the detail fields.


[0080] Paths that are found to conflict require a Conflict Level indication in the Conflict field of this table 98. The specific information housed by the AddPath table and details about each column are listed in Table 4 below.
4TABLE 4FieldData TypeDetailsExampleAppKeyIntegerIn the case of this table, as well as1 Office 97(pk)all other children of the Package3 WordPerfecttable, the number in this fieldindicates one of parent designators.The AppKey is used to indicate thatthe data in this row belongs to acertain application.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Wordthe application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0PathKeyLong IntegerThis number establishes AddPath1(pk)entries table as unique children of2the Package table.Directory255 CharactersThis is the directory for a particularc:\My Documents;path.c:\Program Files;c:\temp, etc . . .Component128 CharactersA component is one particular fileMicrosoft Excel is awithin an application. For instance,program and Help isin Microsoft Excel is a program andone of itsHelp is one of its components.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.A conflict indication results in thistable if an error match is found onthe Directory. When this field has avalue >0, the programmer knowsthat a conflict has occurred withanother path. Both paths should haveconflict indications in this field.


[0081] A Config table 100 is also a child of the Package table 94. Its function is to house detailed information about all changes to Config.sys. For an entry to exist in this table, it must first belong to a package (located in the Package table 94). It is from this package that the AppKey and PackKey data is obtained, along with data for the detail fields.


[0082] Entries that conflict require a Conflict Level indication in the Conflict field as indicated in Table 5 below.
5TABLE 5FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is3 WordPerfectthe Application Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ConfKeyIntegerEach configuration is assigned a1 ,2, 28, 29, etc.(pk)unique number that identifies it. Thisnumber is known as a key.Combined with the AppKey andPackKey information, a specificconfiguration file can be portrayednumerically in other tables.Path255 CharactersThis is a list of directories that willC:\DOSbe added to the path duringinstallation.Entry255 CharactersThis is the device or functionDevice, buffersaffected by the configuration file.Command255 CharactersThis is the command that initiates the386.vxddevice or function. It is characterizedas the text that occurs after the equalsign (=).Options255 CharactersCommand line options/D:CPQCDROMSearch Text255 CharactersThe data that appears in this columnis Wise-specific. It indicates the textto search for when insertinginformation into the Wise program.Comment255 CharactersThis is the user's comment about thechange that occurred to theautoexec.bat file.LineLong IntegerThe number of the line withinConfig.sys that was modified.FlagsLong IntegerThis field may contain any of a1, 2, 4, 6series of bit flags, with up to 32flags possible. Flags in this fieldmay be combined.Component128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication,components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.A match is conducted withCommand and Entry files. An erroris logged in this table when Path orOptions don't match.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0083] An IniChange table 102 is a child of the Package table 94, houses all changes to INI files. Each record in this table 102 represents a single entry in a single section in a single INI file.


[0084] INI files are vital to program function, therefore, any INI file changes that have logged a conflict need to have an indication in that file's Conflict field. Table 6 below indicates this table's fields.
6TABLE 6FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0IniKeyIntegerEach INI file has a unique number1, 2, 28, 29, etc.(pk)that identifies it. This number isknown as a key. The IniKeycombined with the AppKey andPackKey information can portray afile numerically in other tables.Path255 CharactersThe directory in which the modifiedExample forINI file resides.Application 1:Microsoft Office\OF97SPEC.INIExample forApplication 2:\Corel\Suite8\Programs\PFT.INISection255 CharactersThis is the INI file's section name.[MAPI = 1]Notice that these appear in square[Printer Map]brackets.Entry255 CharactersThis is the entry name; the device orMAPIfunction affected by the INI file. It isHP LaserJet IIDthe wording on the left side of thePostscriptequal sign: MAPI = 1EValue255 CharactersThis is the Entry Value. It is the1number on the right side of thePostScriptequals sign: MAPI = 1Component128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.To determine in an INI file conflicthas occurred, a match is run on Path,Section, and Entry. An error isevident if there is a difference in anyof these values.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0085] A Service table 104 is also a child of the Package table 94. Its function is to house detailed information about all services installed as part of a package. For a file to exist in this table 104, it must first belong to a package (located in the Package table 94). It is from this package that the AppKey and PackKey information is obtained, along with data for the detail fields.


[0086] Service files that are found to conflict require a Conflict Level indication in the Conflict field as indicated in Table 7 below.
7TABLE 7FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ServKeyLong IntegerA service file is another sub-unit of a1 , 2, 28, 29, etc.(pk)package. There may be none orseveral service files within apackage. Each service file has aunique number that identifies it andprovides information to other tablesthat require ServKey information.Name255 CharactersText entry of the service nameRegeditDisplayName128 CharactersThe display name is the name used inRegeditdialogsPath255 CharactersThis is the path that leads to this%MAINDIR%\Regrow's service file.edit.exeUserName255 CharactersLists the service user's name.Password255 CharactersCase sensitive, text and numericpassword for the service.STypeLong IntegerEach service type has a unique code1, 2, 16, 32assigned to it for easy identification.BTypeLong IntegerThis field identifies the different run0, 1, 2, 3, 4types by assigning a unique numberto each.ETypeLong IntegerService errors are rated by severity.0, 1, 2, 3Component128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.To determine if there is a serviceerror, a match is run on Name orPath. When this field has a value>0, the programmer knows that aconflict has occurred with anotherpath. Both paths should have conflictindications in this field.


[0087] A File table 106 is another child of the Package table 94. Its function is to house detailed information about all files installed as part of a particular version of an application, known as a Package. For a file to exist in this table, it must first belong to the applicable version of the software being compared (the package located in the Package table 94). It is from this package that the AppKey and PackKey identifiers are obtained, along with data for the detail fields.


[0088] Files that are found to conflict require a Conflict Level indication in the Conflict field. This indication and pertinent file data are used to compile a FileConflict table 112 described below.


[0089] The specific information housed by the File table 106 and details about each column are listed in Table 8 below.
8TABLE 8FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0FileKeyLong IntegerA file is a sub-unit of a package.1, 2, 28, 29, etc.(pk)There may be none or several fileswithin a package. Each file has aunique number that identifies it hereand in other tables that requireFileKey information.SrcStringIDLong IntegerSource path tree.3, 4, 68, 69Sourcename255 CharactersThis field is filled in only when thefile name differs from the name ofthe source string. The file name andextension are listed.StringIDLong IntegerDestination path tree.Numbered insequence, 1, 2, 3, or145, 146, 147Filename255 CharactersThis is the unique file name.Green Design1.wpgDescription255 CharactersDescription of the unique file.SizeLong IntegerFile size in bytes340, 183646, 2271,etc.DTime16 CharactersThis is a date/time field. The first 819970509 080000digits are the specific date the filemeans 1997, Maywas modified (CCYYMMDD) in9th at 08:00 am andWise. The 6-digit number is a 24-00 seconds.hour clock indication of the time thefile was created or modified(HHMMSS).Version32 CharactersThis is the version of a file. The4.40.8371374version numbers are digits separated8.0.0.153by periods, for instance, 4.00.993.04.00.993.0or 8.0.0.153. Note that not all fileswill have version numbers. Theversion numbers are reserved forfiles such as .exe, .dll, .ocx, etc.VersionMSLong IntegerMost significant WORD of the file1953046560version DWORD.VersionLSLong IntegerLeast significant WORD of the file540700005version DWORD.Company255 CharactersCompany that produced the fileMicrosoft(Version Resource)CorporationProduct255 CharactersName of the product the file is forMicrosoft Word(Version Resource)TypeLong IntegerThis field is a series of bit flags that0, 1, 16, 17describe file types. There are up to(16 + 1), 32, 33,32 flags possible. Entries in this(32 + 1), etc.field may be combined.FlagsLong IntegerThis field is a series of bit flags,130, 131, 642, 643,with up to 32 flags possible. Flags in4227, 4739this field may be combined. Eachflag pertains to a Wise instruction.Components128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help inone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2,4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.Looking for a match on Filename: AWarning indication needs to be set ifdifferent 32 bit files occur indifferent directories. An errorindication needs to be set if different16 bit files occur in differentdirectories, or if they occur in thesame directory but with a differentSize, Version, VersionMS,VersionLS, or DTime.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another file. Bothfiles should have conflict indicationsin this field.


[0090] A FileString table 108, a child of the File table 106, is a centralized, hierarchical database of strings that are the destination paths for files. All file strings are listed, and their parent is identified in the ParentID column of this table 108.


[0091] Each section of the file path is assigned a number value. The value of −1 in the Parent column indicates that one is looking at the parent, in this case, C:. The value of 1 indicates that this section's parent is whichever parent has been assigned the number 1 in the ID column. In this case, the parent again is C:. System's parent is not C:. System's parent is 2, which is Windows in this example.


[0092] Table 9 illustrates the table's fields.
9TABLE 9FieldData TypeDetailsExampleStringIDLong IntegerProvides a unique number for each1, 2, 3, etc.string to be used as a StringID key.SText255 CharactersThis is a text entry field that lists theMicrosoftfile types associated with this string.Reference, Artgalry,Orgchart, etc.ParentIDLong IntegerThis column helps you quickly−1, 1, 30, 31, 170,identify the file's parent. There are171, etc.no values of 0 in this columnbecause every entry has a parent, oris a parent.


[0093] A FileAppMap table 110 is a child of the File table 106. The FileAppMap table 110 helps one identify which file strings go with which application. Directory paths are broken down and each section is given an identifier to conserve space. Table 10 contains detailed information about the FileAppMap table fields.
10TABLE 10FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0StringIDLong IntegerSource path tree.3, 4, 68, 69ParentIDLong IntegerThis column helps you quickly−1, 1, 30, 31, 170,identify the file's parent. There are171, etc.no values of 0 in this columnbecause every entry has a parent, oris a parent.


[0094] The FileConflict table 112 is a child of the File table 106. A file must exist in the File table 106 and have a number greater than zero in the File table Conflict field before it can be entered into the FileConflict table 112. The FileConflict table 112 receives its AppKey, PackKey, and FileKey information from the File table entries (AppKey1, AppKey2, etc.). Because a conflict is a result of a comparison, the conflicting files from compared applications need to appear in the FileConflict table 112. This table 112 hold pairs of conflicting files. Given any one file, you may utilize this table to identify all files that conflict with it. Distinguishing one file from another is accomplished by entering all data pertinent to the first file in only the fields with a 1 parent designator. All of the table's fields, with the exception of CLevel, contain such designators to identify the conflicting files. The key number of the first compared application is entered in the AppKey 1 field, then the key number of application 1's affected package is entered in the PackKey 1 field. Finally, the key number of the affected file is entered in the FileKey 1 field. The database now knows exactly which is the first file that has a conflict. To identify the second conflicting file, fill in the AppKey2, PackKey2, and FileKey 2 fields.


[0095] The FileConflict table 112 contains a field called CLevel. The CLevel (conflict level) indicates the severity of the conflict. In this table 112 only conflict levels 2 and 4 are used. If there were no conflicts with this file (value of 0), the file would not appear in this table in the first place. This table 112 is reserved for the two most crucial types of conflicts, Warnings (the value of 2) and Severe Errors (value of 4).


[0096] Table 11 indicates the fields of this table.
11TABLE 11FieldData TypeDetailsExampleAppKeyIntegerThis field identifies the first of the1 Office 97, or any(pk)compared applications. Theother applicationapplication key number is enteredassigned to thishere.numberPackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0FileKey1Long IntegerThis field identifies the specific2 This number(pk)conflicting file within a package.corresponds to theThe application designator, in thisnumber assigned tocase 1, indicates that this file belongsa particular fileto the first of the comparedwithin the package.applications. The actual file keynumber is entered here.AppKey2IntegerThis field identifies the second of the3 Corel(pk)compared applications. TheWordPerfect Suite,application key number is enteredor any otherhere.application assignedto this numberPackKey2IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0FileKey2Long IntegerThis field identifies the specific1 This number(pk)conflicting file within a package.corresponds to theThe application designator, in thisnumber assigned tocase 2, indicates that this file belongsa particular file.to the second of the comparedapplications. The actual file keynumber is entered here.CLevelIntegerSynonymous with Conflict; the2, 4number appearing in this columnholds a significant message about theseverity of the conflict.In this table, only conflict levels 2and 4 are used. If there were noconflict with this file (value of 0),the file would not appear in this tablein the first place. This table isreserved for the two most crucialtypes of conflicts, Warnings (thevalue of 2) and Severe Errors (valueof 4).When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0097] A SrcAppMap table 114, a child of the File table 106, contains detailed information about the SrcAppMap table fields. The SrcAppMap table 114 helps one identify which file source strings go with which source. Directory paths are broken down and each section is given an identifier to conserve space. For example, C:\Windows\System can simply be identified as 3. The data in the rows themselves make up their own keys. The code concept behind the StringID field is such that each section of the file path is assigned a number value. A value of 3 occurring in the StringID column shows that the relative path is C:\Windows\System. However, if a value of 2 occurs, one knows that the relative path is C:\Windows. The value of −1 in the Parent column indicates that one is looking at the parent, in this case, C:. The value of 1 indicates that this section's parent is whichever parent has been assigned the number 1 in the ID column. In this case, the parent again is C:. System's parent is not C:. System's parent is 2 which is Windows in this example.
12TABLE 12FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared1 Office 97(pk)has a unique number. This3 WordPerfectnumber is the Application Key(AppKey) and is used toidentify this application to allother tables that require anAppKey input. This table usesthe AppKey information as oneof the parent identifiers.PackKeyIntegerThe PackKey indicates the1 Microsoft Word 3.0(pk)version of the application.2 Microsoft Word 4.0Different versions of the sameapplication may be comparedfor conflicts.StringIDLong IntegerSource path tree3, 4, 68, 69ParentIDLong IntegerThis column helps you quickly−1, 1, 30, 31, 170, 171,identify the file's parent. Thereetc.are no values of 0 in thiscolumn because every entry hasa parent, or is a parent.


[0098] The SrcString Table 116, another child of the File table 106, is a centralized, hierarchical database of strings. Each string can be assigned a unique code for the purpose of saving string space. Each section of the file path is assigned a number value. The value of −1 in the Parent column indicates that one is looking at the parent, in this case, C:. The value of 1 indicates that this section's parent is whichever parent has been assigned the number 1 of the ID column. In this case, the parent again is C:. System's parent is not C:. System's parent is 2, which is Windows in this example. To quickly define the path C:\Windows\System, all one would have to indicate in this data field would be the code 3.


[0099] Table 13 below indicates this table's fields.
13TABLE 13FieldData TypeDetailsExampleStringIDLong IntegerProvides a unique number for each1, 2, 3, etc.string to be used as a StringID key.There can never be a value of 0 inthis field because all entries in thistable relate to a specific file string.SText255 CharactersThis is a text entry field that lists theCorel User Files,file types associated with this string.AppMan, TexturesParentIDLong IntegerThe entry that is the parent to this−1, 1, 30, 31, 170,entry is listed here by its ID number171, etc.(ParentID).


[0100] A System table 118 is a child of the Package table 94. Its function is to house detailed information about all device driver files. For a file to exist in this table 118, it must first belong to a package (located in the Package table 94). it is from this package that the AppKey and PackKey data is obtained.


[0101] Conflicting System files require a Conflict Level indication in the Conflict field. The specific information about the System table 118 and details about each field are listed in Table 14.
14TABLE 14FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0SysKeyLong IntegerEach system file requires a unique1, 2, 3, etc.(pk)number to identify it from othersystem files. This information,along with the AppKey and PackKeydata is used to uniquely identify thissystem file to other tables that mayrequire this data.Device255 CharactersThe path and filename of the deviceC:\DOSdriver file.Component128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another systemfile. Both files should have conflictindications in this field.


[0102] A Shortcut table 120, a child of the Package table 94, houses all shortcuts and shortcut information for the installed applications. A file cannot exist in this table 120 unless it belongs to a package. It is from this package that the AppKey and PackKey data is obtained.


[0103] If a conflict occurs between two shortcuts, an indication is given in the Conflict field of Table 15.
15TABLE 15FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ShortKeyLong IntegerA shortcut is part of a package.1, 2, 28, 29, etc.(pk)There may be none or severalshortcuts within a package. Shortcutsreside on the desktop and, whendouble-clicked, initiate the desiredprogram's executable file. Eachshortcut has a unique number thatidentifies it here, and in any othertable requiring ShortKeyinformation.Source255 CharactersThis is the path that leads to the file%MAINDIR%\Microsoftthat the shortcut will execute. NoOffice\Office\MSAcommand line arguments should beCCESS.EXEincluded in this entry.Destination255 CharactersThis is the human readable textMicrosoft Accessshown on the desktop for theshortcut.LocationLong IntegerThis is a 2-digit number code for16, 17, 18, 19, 20specifying the location of the icon.Options255 CharactersThe parameters passed to the-b, -n, -pprogram being launched from theshortcut.Workdir255 CharactersThis is the directory that the%MAINDIR%\launched program should startupMicrosoft Office\within. Commonly this affects theOfficeprogram's ability to find neededfiles.IconnumLong IntegerThis is the number of the icon for a0, 1, 2, etc . . .particular program. It is an indexinto the list of icons contained in thefile named by IconPath.IconPath255 CharactersThis is the path and filename of a file%MAINDIR%\containing the icon to be shown onMicrosoft Office\the desktop for the shortcut. ThisOffice\OSA.EXEmay name an .exe, .dll, or even an.ico file.FileKeyLong IntegerIf this shortcut refers to a file in this1 , 2, 3, etc.application, this field refers to thatfile in the files tableComponent128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.Conflicts with shortcuts aredetermined by running a match onthe same Destination and Location,and the same Icon Group in thePackage Table. An error results ifthere is not a match on Source,Options, Workdir, Iconnum, orIconpath.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0104] A Registry table 122 is a child of the package table 94. Its function is to house detailed information about all registry entries in a package. For an entry to exist in this table, it must first belong to a package (located in the Package table). It is from this package that the AppKey and PackKey information is obtained, along with data for the lesser fields.


[0105] Registry entries that are found to conflict require a Conflict Level indication in the Conflict field as indicated in Table 16. This indication and pertinent entry data are used to compile a RegConflict table 128 described below, a child of the Registry table 122.
16TABLE 16FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0RegKeyLong IntegerA registry is another sub-unit of a1, 2, 28, 29, 1245,(pk)package. There may be none or1246, etc.several registry files within apackage. Each registry file has aunique number that identifies it inother tables that require RegKeyinformation.StringIDLong IntegerReference to the RegString table,7, 8, 458, 459,giving the name of the registry key6892, 6893, etc.being represented.NameKeyLong IntegerReference to the RegKeyName table,3, 7, 243, etc.giving the name of the registry keybeing represented.TypeIntegerThis field is a series of bit flags that0, 3describe file types. There are up to32 flags possible. Entries in thisfield may be combined.RValue255 CharactersValue of the registry entry.doc, WordPerfect6.x, Yes, No, 4005,%MAINDIR%\Corel\Suite8\Shared IDAPIValueKeyLong IntegerReference to RegValue table, giving6, 87, 342, etc.the rest of a registry value that islonger than 255 charactersOperationLong IntegerOperations are key and value0, 1instructions. Each operation has acode for quick reference.Component128 CharactersThis is a text entry name of theMicrosoft Excel is aaffected component. A component isprogram and Help isone particular file within anone of itsapplication.components.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level; the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.To determine if a conflict exists witha registry file, a match is conductedon NameKey and StringID. An errorexists if a different Value,Operation, or Type occurs.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0106] A RegString table 124 provides centralized storage of registry key names. Entries are stored in a hierarchical fashion using a self-referencing ParentID column. The ParentID relates to other sections of a file path for efficient identification. Each section of the file path is assigned a number value. The value of −1 in the Parent column indicates that you are looking at the parent, in this case C:. The value of 1 indicates that this sections' parent is whichever parent has been assigned the number 1 in the ID column.


[0107] Table 17 shows the details of the fields of this table 124.
17TABLE 17FieldData TypeDetailsExampleStringIDLong IntegerProvides a unique number for each1, 2, 3, etc.string to be used as a StringID key.SText255 CharactersThis is a text entry field that lists thePrintable, .oss, .pot,different registry file types.ppt, AuxUserType,associated with this string.etc.ParentIDLong IntegerThis column helps you quickly−1, 1, 30, 31, 170,identify the registry file's parent.171, etc.There are no values of 0 in thiscolumn because every entry has aparent, or is a parent.


[0108] A RegAppMap table 126 lists all registry strings in both compared applications. Coding the registry path makes locating registry paths efficient. Registry paths are broken down and each section is given an identifier. The end result is a single number that represents an entire path such that C:\Windows\System can simply be identified as 3. The data in the rows themselves make up their own keys.


[0109] Table 18 contains detailed information about the RegAppMap table fields.
18TABEL 18FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0StringIDLong IntegerEach section of a path is assigned a1, 2, 28, 29, 65, 66,number. Each number quicklyetc.identifies a unique path.ParentIDLong IntegerThis column helps you quickly−1, 1, 30, 31, 170,identify the registry file's parent.171, etc.There are no values of 0 in this fieldbecause every entry has a parent, oris a parent.


[0110] A RegConflict table 128 is the child of the Registry table 122, and therefore has three parent identifiers: the AppKey, PackKey, and RegKey. The function of the RegConflict table 128 is to list all registry entries that have been identified as having conflicts. An entry must exist in the Registry table 122 and have a number greater than zero in the Registry table Conflict field before it can be entered into the RegConflict table 128.


[0111] The RegConflict table 128 receives its AppKey, PackKey, and RegKey information from the Registry table entries (AppKey1, AppKey2, etc.). Because a conflict is a result of a comparison, the conflicting entries from both applications need to appear in the RegConflict table 128.


[0112] Distinguishing one conflicting registry entry from another is accomplished by entering all data pertinent to the first entry in only the fields with a 1 parent designator. All of the table's fields, with the exception of CLevel, contain such designators to identify the conflicting entries. The key number of the first compared application is entered in the AppKey1 field, then the key number of application 1's package is entered in the PackKey1 field. Finally, the key number of the affected registry file is entered in the RegKey1 field. The database now knows exactly which is the first file that has a conflict. To identify the second conflicting file, fill in the AppKey2, PackKey2, and RegKey2 fields.


[0113] Table 19 contains detailed information about the RegConflict table fields.
19TABLE 19FieldData TypeDetailsExampleAppKey1IntegerThis field identifies the first of the1 Office 97(pk)compared applications. Theapplication key number is enteredhere.PackKey1IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0RegKey1Long IntegerThis field identifies the specific2 meaning the(pk)conflicting registry entry within asecond registry filepackage. The application designator,within the packagein this case 1, indicates that thisentry belongs to the first of thecompared applications. The actualentry key number is entered here.AppKey2IntegerThis field identifies the second of the3 WordPerfect(pk)compared applications. Theapplication key number is enteredhere.PackKey2IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0RegKey2Long IntegerThis field identifies the specific1 meaning the first(pk)conflicting registry entry within aregistry file withinpackage. The application designator,the packagein this case 2, indicates that thisentry belongs to the second of thecompared applications. The actualentry key number is entered here.CLevelIntegerSynonymous with Conflict; the2, 4number appearing in this columnholds a significant message about theseverity of the conflict.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0114] A RegValue table 130 holds blocks of up to 255 characters for registry values that are over 255 characters long. The first 255 characters are kept in the Registry Table and further extensions of that value are kept in this table. This allows for indefinite length registry values to be kept in the lowest common character field size. The RegValue is listed as Table 20 below.
20TABLE 20FieldData TypeDetailsExampleValueKeyLong IntegerEach registry value extension is assigned1, 2, 88, 89, 1000,(pk)a unique number for expedient1001, etc.identification.StartKeyLong IntegerThe first ValueKey used for this registry1, 2, 308, 997, etc.value. This is to obtain all RegValuerows for a single key in one query.RegValue255 CharactersUp to 255 characters of the registry0110111101110100value.1111, CLSID'sNextKeyLong IntegerIf the value continues on past 25566, 763, 1433, etc.characters, the following row in theRegValue table. References ValueKey.


[0115] A RegKeyName table 132 holds registry key names and allows one to assign each a value. This value allows registry files to be quickly identified, and therefore increase conflict resolution speed and decrease string spaced used. Detailed information about each field in the RegKeyName table is in Table 21.
21TABLE 21FieldData TypeDetailsExampleNameKeyNumberEach registry key is assigned a unique1, 2, 88, 89, 1000,(pk)number for expedient identification.1001, etc.ValueName255 CharactersThis is the text name of the registry Key.Quick Type, DateFormatEnable ReferenceChecker


[0116] A ODBCServ table 134, a child of the Package table 94, lists all drivers, data sources, and their managers. This data is broken down farther into driver attributes in a ODBCAtt table 136, which is a child of this table 134.


[0117] Detailed information about each field of the ODBCServ table 134 is in Table 22.
22TABLE 22FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ODBCKeyLong IntegerThe number in this field represents1, 2, 9, 10, etc.(pk)the unique identifier for a particulardriver. No two of these fields shouldbe alike. This information is used inthe ODBCAtt table to distinguishwhich attributes go with whichdrivers.Manager255 CharactersThis is the text name of a driver'sODBC_MANAGERmanager.Text FilesDriver255 CharactersText names of each driver appear inMicrosoft Excelthis field. File-type designators inDriver (*.xls)parenthesis typically follow the text.Microsoft TextDriver (*txt; *csv)Component128 CharactersThis column is not currently used inNot usedthis table.FlagsLong IntegerThe flag indications in this field8, 16indicate whether the ODBC is a datasource or a driver. These codes areConflictManager ™ particular.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.Conflicts occurring here indicateproblems with particular drivers ordata sources. These conflicts mustalso appear in the GenConflict table.(Only conflicting ODBC attributesare logged in the ODBCConflicttable.)ODBC DataSource - A match on theManager (data source name) isconducted to determinediscrepancies, and then compared tothe same attributes in the ODBCAtttable. A Warning condition exists ifthe attribute exists in one driver, butnot the other. An Error conditionexists if a difference in attributevalues occurs, or a different driver ispresent in ODBCServ.ODBC Driver - A match on thedriver and flags (in particular, theWin32 flag) is conducted todetermine discrepancies, and thencompared to the same attributes inthe ODBCAtt table. A Warningcondition exists if the attribute existsin one driver, but no the other. AnError condition exists if there is adifference in attribute values.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0118] The ODBCAtt table 136 is the child of the ODBCServ table 134, and therefore has three parent identifiers: the AppKey, PackKey, and ODBCKey. The function of the ODBCAtt table 136 is to list all attributes and attribute values of the drivers listed in the ODBCServ table 134 and to log any conflicts between the drivers. For an entry to exist in ODBCAtt, it must have an associated driver or data source in the ODBCServ table 134. The ODBCKey tells one each attribute's associated driver or data source. Each attribute has a unique identifier, the AttKey, which distinguishes it from all other attributes of a driver.


[0119] ODBC attribute conflict information is logged on this table 136 before being transferred to the ODBCConflict table 138. Any attribute with a Conflict value of >0 must be logged on both tables 136 and 138.


[0120] Table 23 contains detailed information about the ODBCAtt table fields.
23TABLE 23FieldData TypeDetailsExampleAppKeyIntegerEach application to be compared has1 Office 97(pk)a unique number. This number is the3 WordPerfectApplication Key (AppKey) and isused to identify this application to allother tables that require an AppKeyinput. This table uses the AppKeyinformation as one of the parentidentifiers.PackKeyIntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ODBCKeyLong IntegerIn the case of this table, this key is1, 2, 9, 10, etc.(pk)also a parent identifier. This fieldtells you the key number of thedriver in the ODBCServ table that isassociated with this attribute.AttKeyLong IntegerBecause there can be many attributes1, 2, 9, 10, etc.(pk)to a driver, the AttKey is the uniquenumber that identifies this attributefrom its siblings.Attribute64 CharactersThis is the text name of the attributeFileUsage,being described in this row.DriverODBCVer,Setup, etc.AttValue255 CharactersThis is the value associated with theYYN, 02.50, *.xls,named attribute, similar to the name0, 1, odbcjt32.dll,and value pairs of INI files.etc.ConflictIntegerSynonymous with Clevel (conflict0, 1, 2, 4level); the number appearing in thiscolumn holds a significant messageabout the severity of the conflict.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.A Warning needs to be indicated ifan attribute exists in one driver andnot the other. An Error indicationneeds to be logged if ODBC attributevalues are conflicting.


[0121] The ODBCConflict table 138 is a child of the ODBCAtt table 136. What makes this conflict table unique is its four parent identifiers: the AppKey, PackKey, ODBCKey and AttKey. The function of the ODBCConflict table 138 is to list all conflicting driver attributes. An attribute must exist in the ODBCAtt table 136 and have a number greater than zero in the Conflict field before it can be entered into the ODBCConflict table 138. The ODBCConflict table 138 contains its AppKey, PackKey, ODBCKey and AttKey information from three ODBCAtt table entries (AppKey1, AppKey2, etc.) Only attribute conflicts are logged here. Because a conflict is a result of a comparison, the conflicts from both attributes need to appear in the ODBCConflict table 138.


[0122] Distinguishing one application from another is necessary, and is accomplished by entering all data pertinent to the first compared data source in only the fields with a 1 parent designator. All of the table's fields, with the exception of CLevel, contain such designators to identify the conflicting files. The key number of the first compared driver is entered in the AppKey1 field, then the key number of device 1's affected package is entered in the PackKey1 field. The ODBCKey1 represents the first device's affected ODBC file. Finally, the key number of the affected attribute is entered in the AttKey1 field. The database now knows exactly which is the first attribute that has a conflict. To identify the second conflicting device, fill in the AppKey2, PackKey2, ODBCKey2, and AttKey2 fields.


[0123] Table 24 contains detailed information about the ODBCConflict table fields.
24TABLE 24FieldData TypeDetailsExampleAppKey1IntegerThis field identifies the first of the1 Office 97(pk)compared applications. Theapplication key number is enteredhere.PackKey1IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ODBCKey1Long IntegerThis field identifies the affected2 This number(pk)attributes ODBC. The applicationcorresponds to thedesignator, in this case 1, indicatesnumber assigned tothat this ODBC belongs to the firsta particular attribute.application.AttKey1Long IntegerThis field identifies the specific,4 Attribute file(pk)conflicting attribute within aidentified as numberpackage. This application designator,4.in this case 1, indicates that thisattribute belongs to the first of thecompared applications. The actualattribute key number is entered here.AppKey2IntegerThis field identifies the second of the3 WordPerfect(pk)compared applications. Theapplication key number is enteredhere.A value of 0 may be present if theconflict does not appear in thecompared application.PackKey2IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ODBCKey2Long IntegerThis field identifies the affected5 An ODBC driver(pk)attribute's ODBC. The applicationlisted within thedesignator, in this case 2, indicatespackage, assigned tothat this ODBC belongs to the secondnumber 5application.AttKey2Long IntegerThis field identifies a specific,1 This number(pk)conflicting attribute within acorresponds to thepackage. The application designator,number assigned toin this case 2, indicates that thisa particular attributeattribute belongs to the second of thecompared applications. The actualattribute key number is entered here.CLevelIntegerSynonymous with Conflict; the0, 1, 2, 4number appearing in this columnholds a significant message about theseverity of the conflict.Only conflicting ODBC attributes arelogged in this table. Other ODBCconflicts are logged in theGenConflict table. When this fieldhas a value >0, the programmerknows that a conflict has occurredwith another path. Both paths shouldhave conflict indications in this field.


[0124] The MSIComponent table 140 is a child of the Package table. Its function is to log all Microsoft Windows Installer Components in the compared applications.


[0125] A Microsoft Windows Installer Component is the smallest level of an Microsoft Windows Installer install. All changes that can be made to a system are tied to a component. For a record to exist in this table, it must first belong to a package (located in the Package table). It is from this package that the AppKey and PackKey data is obtained, along with data for the other fields.


[0126] The specific information housed by the Microsoft Windows Installer Component table and details about each column are listed in Table 25 below.
25TABLE 25FieldData TypeDetailsExampleAppKeyIntegerIn the case of this table, as well as1 Office 97(pk)all other children of the Package3 WordPerfecttable, this field is one of the parentdesignators. The AppKey is usedto indicate that the data in this rowpertains to a certain application;the application associated with thatparticular number.PackKeyIntegerThe PackKey indicates the version1 Microsoft Word 3.0(pk)of the application. Different2 Microsoft Word 4.0versions of the same applicationmay be compared for conflicts.CompKeyLong IntegerThis number establishes the1(pk)MSIComponent table as a unique2child of the Package table.Component128 CharactersThis is the key for the WindowsProgramFiles,Installer Component within theInstallDirMicrosoft Windows Installertechnology.Component38 CharactersThis is the GUID for the{5CB2D5F0-19DD-IDcomponent11d1-9A9D-006097C4E489}Directory32 CharactersThis is a key into the MicrosoftProgramFiles,Windows Installer Directory tablePrivateDirthat specifies the directory for theComponent.AttributesIntegerThis column specifies options for0, 1, 5remote execution which is used inthe Microsoft Windows Installer . . .Condition255 CharactersThis column contains a conditionalInstallMode =statement that can control whether“Custom”or not a component is installed.KeyPath72 CharactersThis value points to a file or folderMyprog.exe, mylib .dllbelonging to the component thatthe installer uses to detect thecomponent.


[0127] A GenConflict table 142 houses all non-File and non-Registry conflicts. The Type block allows one to specify what type of file is having the conflict, for example, INI files, Autoexec.bat, etc. Because a conflict is a result of a comparison, the conflicting files from both applications need to appear in the GenConflict table 142. Like other conflict tables, the GenConflict table 142 has three parent identifiers: the AppKey, PackKey, and ItemKey.


[0128] Distinguishing one application from another is necessary, and is accomplished by entering all data pertinent to the first compared shared resource in only the fields with a 1 parent designator. All of the table's fields, with the exception of CLevel, contain such designators to identify the conflicting files. The key number of the first compared application is entered in the AppKey1 field, then the key number of file 1's affected package is entered in the PackKey1 field. The database now knows exactly which is the first shared resource that has a conflict. To identify the second conflicting file, fill in the AppKey2, ItemKey2, and RegKey2 fields. The GenConflict table 142 contains a field called “type”. Each code within this field refers to a certain type of file that is experiencing the conflict. This table 142 also contains a CLevel field. When this field has a value >0, the programmer knows that a conflict has occurred with another path.


[0129] Table 26 contains detailed information about the GenConflict table fields.
26TABLE 26FieldData TypeDetailsExampleAppKey1IntegerThis field identifies the first of the1 Office 97(pk)compared applications. Theapplication key number is enteredhere.PackKey1IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ItemKey1Long IntegerThis field identifies the specific2 meaning the(pk)conflicting item within a package.second file withinThe application designator, in thisthe packagecase 1, indicates that this itembelongs to the first of the comparedapplications. The actual item keynumber is entered here.AppKey2IntegerThis field identifies the second of the3 WordPerfect(pk)compared applications. Theapplication key number is enteredhere.PackKey2IntegerThe PackKey indicates the version of1 Microsoft Word(pk)the application. Different versions of3.0the same application may be2 Microsoft Wordcompared for conflicts.4.0ItemKey2Long IntegerThis field identifies the specific1 This number(pk)The conflicting item within a package.corresponds to theapplication designator, in thisnumber assigned tocase 2, indicates that this itema particular itembelongs to the second of thecompared applications. The actualitem key number is entered here.TypeLong IntegerThe code listed in this field refers to1, 2, 4a specific type of file that isexperiencing the conflict.CLevelIntegerSynonymous with Conflict; the2, 4number appearing in this columnholds a significant message about theseverity of the conflict.When this field has a value >0, theprogrammer knows that a conflicthas occurred with another path. Bothpaths should have conflictindications in this field.


[0130] While embodiments of the invention have been illustrated and described, it is not intended that these embodiments illustrate and describe all possible forms of the invention. Rather, the words used in the specification are words of description rather than limitation, and that various changes may be made without departing from the spirit and scope of the invention.


Claims
  • 1. A method for managing software conflicts, the method comprising the steps of: determining changes made to a computer system's files and other shared resources during installation of at least one application into the computer system to obtain change information; processing the change information to determine which files and shared resources conflict with one another to obtain conflict information; storing the conflict information in a database of interrelated tables; and resolving the software conflicts based on the stored conflict information.
  • 2. The method as claimed in claim 1 wherein the conflict information includes DLL file conflict information.
  • 3. The method as claimed in claim 1 wherein the conflict information includes registry conflict information.
  • 4. The method as claimed in claim 1 wherein the conflict information includes shortcut conflict information.
  • 5. The method as claimed in claim 1 wherein the conflict information includes driver conflict information.
  • 6. The method as claimed in claim 1 wherein the conflict information includes data source conflict information.
  • 7. The method as claimed in claim 1 wherein the conflict information includes service conflict information.
  • 8. The method as claimed in claim 1 wherein the conflict information includes device conflict information.
  • 9. The method as claimed in claim 1 wherein the conflict information includes Microsoft Windows Installer component conflict information.
  • 10. The method as claimed in claim 1 wherein the conflict information includes autoexec.bat conflict information.
  • 11. The method as claimed in claim 1 wherein the conflict information includes config.sys conflict information.
  • 12. The method as claimed in claim 1 wherein the conflict information includes INI changes conflict information.
  • 13. The method as claimed in claim 1 wherein the conflict information includes path conflict information.
  • 14. The method as claimed in claim 1 wherein the step of resolving includes the step of generating an installer from the information stored in the database for the at least one application.
  • 15. The method as claimed in claim 1 wherein at least one of the tables has a conflict field for storing a conflict level indication therein.
  • 16. A computer-readable storage medium having stored therein a program which executes the steps of: determining changes made to a computer system's files and other shared resources during installation of at least one application into the computer system to obtain change information; processing the change information to determine which files and shared resources conflict with one another to obtain conflict information; storing the conflict information in a database of interrelated tables; and resolving software conflicts based on the stored conflict information.
  • 17. The storage medium as claimed in claim 16 wherein the program further executes the step of generating an installer for the at least one application.
  • 18. A system for managing software conflicts, the system comprising: means for determining changes made to a computer system's files and other shared resources during installation of at least one application into the computer system to obtain change information; means for processing the change information to determine which files and shared resources conflict with one another to obtain conflict information; a database of interrelated tables for storing the conflict information; and means for resolving the software conflicts based on the stored conflict information.
  • 19. The system as claimed in claim 18 wherein the conflict information includes DLL file conflict information.
  • 20. The system as claimed in claim 18 wherein the conflict information includes registry conflict information.
  • 21. The system as claimed in claim 18 wherein the conflict information includes shortcut conflict information.
  • 22. The system as claimed in claim 18 wherein the conflict information includes driver conflict information.
  • 23. The system as claimed in claim 18 wherein the conflict information includes data source conflict information.
  • 24. The system as claimed in claim 18 wherein the conflict information includes service conflict information.
  • 25. The system as claimed in claim 18 wherein the conflict information includes device conflict information.
  • 26. The system as claimed in claim 18 wherein the conflict information includes Microsoft Windows Installer component conflict information.
  • 27. The system as claimed in claim 18 wherein the conflict information includes autoexec.bat conflict information.
  • 28. The system as claimed in claim 18 wherein the conflict information includes config.sys conflict information.
  • 29. The system as claimed in claim 18 wherein the conflict information includes INI changes conflict information.
  • 30. The system as claimed in claim 18 wherein the conflict information includes path conflict information.
  • 31. The system as claimed in claim 18 wherein the means for resolving includes means for generating an installer from the information stored in the database for the at least one application.
  • 32. The system as claimed in claim 18 wherein at least one of the tables has a conflict field for storing a conflict level indicator therein.