| 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.  
 | 
|---|