| [460] | 1 | 5/9/2003 | 
|---|
|  | 2 | ======== | 
|---|
|  | 3 |  | 
|---|
|  | 4 | IMPORTANT NOTE | 
|---|
|  | 5 | TO ALL SITES UTILIZING DELPHI CPRS GUI SOURCE CODE: | 
|---|
|  | 6 |  | 
|---|
|  | 7 | A problem was found in Delphis ComServ.pas file which causes problems | 
|---|
|  | 8 | with COM object registration during installation of an application | 
|---|
|  | 9 | utilizing such objects.  This file explains the problem and the fix | 
|---|
|  | 10 | for it. | 
|---|
|  | 11 |  | 
|---|
|  | 12 | EACH SITE MUST IMPLEMENT THIS FIX MANUALLY in order to compile CPRS. | 
|---|
|  | 13 |  | 
|---|
|  | 14 | You must have the Delphi Source code to implement this fix; it is | 
|---|
|  | 15 | available only with Delphi Prossional or Delphi Enterprise (unknown: | 
|---|
|  | 16 | Delphi Developer version?).  The assumption is that anyone involved | 
|---|
|  | 17 | with local modifications will have a properly-licensed version. | 
|---|
|  | 18 |  | 
|---|
|  | 19 | After making the fix, DO NOT distribute the modified source code - anywhere. | 
|---|
|  | 20 |  | 
|---|
|  | 21 | Explanation: | 
|---|
|  | 22 |  | 
|---|
|  | 23 | If you try to register Com objects as a Restricted User (not a Power User | 
|---|
|  | 24 | or Administrator) on Win2000 or XP, ComServ.pas will always throw an unhandled | 
|---|
|  | 25 | error during program initialization because you don't have write permissions | 
|---|
|  | 26 | to the registry. | 
|---|
|  | 27 |  | 
|---|
|  | 28 | The TComServer.Initialize code attempts to "squelch the exception unless | 
|---|
|  | 29 | we were explicitly told to register."  But, it only traps the Ole | 
|---|
|  | 30 | Registration Error and not the Ole Sys Error that was raised in | 
|---|
|  | 31 | RegisterTypeLibrary from the OleCheck call. | 
|---|
|  | 32 |  | 
|---|
|  | 33 | Two added lines were placed in the following code in the | 
|---|
|  | 34 | TComServer.Initialize procedure of the ComServ.pas unit as a | 
|---|
|  | 35 | workaround: | 
|---|
|  | 36 |  | 
|---|
|  | 37 | procedure TComServer.Initialize; | 
|---|
|  | 38 | begin | 
|---|
|  | 39 | try | 
|---|
|  | 40 | UpdateRegistry(FStartMode <> smUnregServer); | 
|---|
|  | 41 | except | 
|---|
|  | 42 | on E: EOleRegistrationError do | 
|---|
|  | 43 | // User may not have write access to the registry. | 
|---|
|  | 44 | // Squelch the exception unless we were explicitly told to register. | 
|---|
|  | 45 | if FStartMode = smRegServer then raise; | 
|---|
|  | 46 | on E: EOleSysError do | 
|---|
|  | 47 | if FStartMode = smRegServer then raise; | 
|---|
|  | 48 | end; | 
|---|
|  | 49 | if FStartMode in [smRegServer, smUnregServer] then Halt; | 
|---|
|  | 50 | ComClassManager.ForEachFactory(Self, FactoryRegisterClassObject); | 
|---|
|  | 51 | end; | 
|---|
|  | 52 |  | 
|---|
|  | 53 | To utilize this fix, copy the unit ComServ.pas into the CPRS-Chart | 
|---|
|  | 54 | directory, rename it to uComServ.pas and then make the change above to | 
|---|
|  | 55 | the TComServer.Initialize procedure of the new uComserv.pas file. | 
|---|
|  | 56 | Then add uComServ.pas to the project.  Finally, change the "Uses" clause | 
|---|
|  | 57 | of everything that used to use "ComServ" to "uComServ" instead -- currently, | 
|---|
|  | 58 | this consists of the files uAccessibleListBox.pas, uAccessibleStringGrid.pas, | 
|---|
|  | 59 | uAccessibleTreeNode.pas, and uAccessibleTreeView.pas. | 
|---|
|  | 60 |  | 
|---|
|  | 61 | NOTE that a ComServ.pas file IS NOT included in this zip distribution. | 
|---|
|  | 62 | You must create this file yourself (by copying and modifying) and place | 
|---|
|  | 63 | it in the CPRS-Chart directory.  The four units listed above already | 
|---|
|  | 64 | have uComServ in their Uses clauses (in place of the ComServ unit | 
|---|
|  | 65 | formerly listed). | 
|---|
|  | 66 |  | 
|---|
|  | 67 | This fix allows COM objects included with CPRS GUI to be registered on | 
|---|
|  | 68 | an installation machine.  (Note that machines where disabled users | 
|---|
|  | 69 | will utilize applications accessing those COM objects need to have a | 
|---|
|  | 70 | Power User or Adminstrator user run the application one time (unless | 
|---|
|  | 71 | the disabled user is already a Power User or Adminstrator user) before | 
|---|
|  | 72 | ongoing usage. | 
|---|