[456] | 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.
|
---|