ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/IBInstall.pas
Revision: 1
Committed: Mon Jul 31 16:43:00 2000 UTC (23 years, 8 months ago) by tony
Content type: text/x-pascal
File size: 24334 byte(s)
Log Message:
Borland IBX Open Source Release

File Contents

# Content
1 {************************************************************************}
2 { }
3 { Borland Delphi Visual Component Library }
4 { InterBase Express core components }
5 { }
6 { Copyright (c) 1998-2000 Inprise Corporation }
7 { }
8 { InterBase Express is based in part on the product }
9 { Free IB Components, written by Gregory H. Deatz for }
10 { Hoagland, Longo, Moran, Dunst & Doukas Company. }
11 { Free IB Components is used under license. }
12 { }
13 { The contents of this file are subject to the InterBase }
14 { Public License Version 1.0 (the "License"); you may not }
15 { use this file except in compliance with the License. You }
16 { may obtain a copy of the License at http://www.Inprise.com/IPL.html }
17 { Software distributed under the License is distributed on }
18 { an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either }
19 { express or implied. See the License for the specific language }
20 { governing rights and limitations under the License. }
21 { The Original Code was created by InterBase Software Corporation }
22 { and its successors. }
23 { Portions created by Inprise Corporation are Copyright (C) Inprise }
24 { Corporation. All Rights Reserved. }
25 { Contributor(s): Jeff Overcash }
26 { }
27 {************************************************************************}
28
29 {
30 InterBase Express provides component interfaces to
31 functions introduced in InterBase 6.0. The Services
32 components (TIB*Service, TIBServerProperties) and
33 Install components (TIBInstall, TIBUninstall, TIBSetup)
34 function only if you have installed InterBase 6.0 or
35 later software
36 }
37
38 unit IBInstall;
39
40 interface
41
42 uses Windows, TypInfo,SysUtils, Classes, IB, IBInstallHeader, IBIntf, IBXConst;
43
44 type
45
46 TIscError = MSG_NO;
47 TIBInstallerError = (ieSuccess,
48 ieDelphiException,
49 ieNoOptionsSet,
50 ieNoDestinationDirectory,
51 ieNosourceDirectory,
52 ieNoUninstallFile,
53 ieOptionNeedsClient,
54 ieOptionNeedsServer,
55 ieInvalidOption,
56 ieInvalidOnErrorResult,
57 ieInvalidOnStatusResult);
58
59 TMainOption = (moServer,
60 moClient,
61 moConServer,
62 moGuiTools,
63 moDocumentation,
64 moDevelopment);
65
66
67 TExamplesOption = (exDB, exAPI);
68 TCmdOption = (cmDBMgmt, cmDBQuery, cmUsrMgmt);
69 TConnectivityOption = (cnODBC, cnOLEDB, cnJDBC);
70
71 TMainOptions = set of TMainOption;
72 TExamplesOptions = set of TExamplesOption;
73 TCmdOptions = set of TCmdOption;
74 TConnectivityOptions = set of TConnectivityOption;
75
76 TErrorResult = (erAbort, erContinue, erRetry);
77 TStatusResult = (srAbort, srContinue);
78 TWarningResult = (wrAbort, wrContinue);
79
80 TIBSetupOnStatus = function(Sender : TObject; StatusComment : string):
81 TStatusResult of object;
82 TIBSetupOnWarning = function(Sender :TObject; WarningCode: TIscError;
83 WarningMessage : string): TWarningResult of object;
84 TIBSetupOnError = function (Sender : TObject; IscCode : TIscError;
85 ErrorMessage, ErrorComment : string):
86 TErrorResult of object;
87
88 EIBInstall = class(Exception)
89 private
90 FIscError : MSG_NO;
91 FInstallerError : TIBInstallerError;
92 public
93 constructor Create(IscCode : MSG_NO; IscMessage : string); overload; virtual;
94 constructor Create(ECode : TIBInstallerError; EMessage : string); overload;
95 virtual;
96 property InstallError : MSG_NO read FIscError;
97 property InstallerError : TIBInstallerError read FInstallerError;
98 end;
99
100 EIBInstallError = class(EIBInstall);
101
102 EIBInstallerError = class(EIBInstall);
103
104 TInstallOptions = class(TPersistent)
105 private
106 FMainComponents : TMainOptions;
107 FExamples: TExamplesOptions;
108 FCmdLineTools: TCmdOptions;
109 FConnectivityClients: TConnectivityOptions;
110 published
111 property MainComponents : TMainOptions read FMainComponents write FMainComponents;
112 property CmdLineTools: TCmdOptions read FCmdLineTools write FCmdLineTools;
113 property ConnectivityClients: TConnectivityOptions read FConnectivityClients
114 write FConnectivityClients;
115 property Examples: TExamplesOptions read FExamples write FExamples;
116 end;
117
118 TIBSetup = class(TComponent)
119 private
120 FIBInstallLoaded: Boolean;
121 FRebootToComplete: Boolean;
122 FProgress: Integer;
123 FMsgFilePath: string;
124 FOnStatusChange: TIBSetupOnStatus;
125 FStatusContext : Pointer;
126 FOnError: TIBSetupOnError;
127 FErrorContext : Pointer;
128 FOnWarning: TIBSetupOnWarning;
129 procedure SetMsgFilePath(const Value: string);
130 protected
131 function StatusInternal(Status: Integer; const ActionDescription: TEXT):Integer;
132 function ErrorInternal(IscCode: MSG_NO; const ActionDescription: TEXT): Integer;
133 procedure Call(IscCode: MSG_NO);
134 procedure IBInstallError(IscCode: MSG_NO);
135 function GetInstallMessage(IscCode : MSG_NO) : string;
136 public
137 constructor Create(AOwner : TComponent); override;
138 property RebootToComplete : Boolean read FRebootToComplete;
139 property Progress : Integer read FProgress;
140 property StatusContext : Pointer read FStatusContext write FStatusContext;
141 property ErrorContext : Pointer read FErrorContext write FErrorContext;
142 property MsgFilePath: string read FMsgFilePath write SetMsgFilePath;
143 published
144 property OnWarning: TIBSetupOnWarning read FOnWarning write FOnWarning;
145 property OnError: TIBSetupOnError read FOnError write FOnError;
146 property OnStatusChange: TIBSetupOnStatus read FOnStatusChange write FOnStatusChange;
147 end;
148
149 TIBInstall = class(TIBSetup)
150 private
151 FUnInstallFile: string;
152 FSourceDir: string;
153 FDestinationDir: string;
154 FSuggestedDestination: string;
155 FInstallOptions: TInstallOptions;
156 procedure GetOptionProperty(InfoType : Integer; Option : TExamplesOption;
157 Buffer : Pointer; BufferLen : Cardinal); overload;
158 procedure GetOptionProperty(InfoType : Integer; Option : TMainOption;
159 Buffer : Pointer; BufferLen : Cardinal); overload;
160 procedure GetOptionProperty(InfoType : Integer; Option : TConnectivityOption;
161 Buffer : Pointer; BufferLen : Cardinal); overload;
162 procedure GetOptionProperty(InfoType : Integer; Option : TCmdOption;
163 Buffer : Pointer; BufferLen : Cardinal); overload;
164 procedure InternalSetOptions(pHandle : POPTIONS_HANDLE);
165 procedure SetDestination(const Value: string);
166 procedure SetSource(const Value: string);
167 procedure SetInstallOptions(const Value: TInstallOptions);
168 procedure SuggestDestination;
169 public
170 Constructor Create(AOwner: TComponent); override;
171 Destructor Destroy; override;
172
173 procedure InstallCheck;
174 procedure InstallExecute;
175
176 function GetOptionDescription (Option : TExamplesOption): string; overload;
177 function GetOptionDescription (Option : TMainOption) : string; overload;
178 function GetOptionDescription (Option : TConnectivityOption) : string; overload;
179 function GetOptionDescription (Option : TCmdOption) :string; overload;
180
181 function GetOptionName (Option : TExamplesOption): string; overload;
182 function GetOptionName (Option : TMainOption) :string; overload;
183 function GetOptionName (Option : TConnectivityOption) : string; overload;
184 function GetOptionName (Option : TCmdOption) : string; overload;
185
186 function GetOptionSpaceRequired (Option : TExamplesOption): longword; overload;
187 function GetOptionSpaceRequired (Option : TMainOption): longword; overload;
188 function GetOptionSpaceRequired (Option : TConnectivityOption): longword; overload;
189 function GetOptionSpaceRequired (Option : TCmdOption): longword; overload;
190
191 property UnInstallFile: string read FUnInstallFile;
192 property SuggestedDestination: string read FSuggestedDestination;
193
194 published
195 property SourceDirectory: string read FSourceDir write SetSource;
196 property DestinationDirectory: string read FDestinationDir write SetDestination;
197 property InstallOptions: TInstallOptions read FInstallOptions write SetInstallOptions;
198 end;
199
200 TIBUnInstall = class(TIBSetup)
201 private
202 FUnInstallFile: string;
203 public
204 procedure UnInstallCheck;
205 procedure UnInstallExecute;
206 property UnInstallFile: string read FUnInstallFile write FUnInstallFile;
207 published
208 end;
209
210 implementation
211
212 const
213 IBInstallerMessages : array[TIBInstallerError] of string = (
214 SSuccess,
215 SDelphiException,
216 SNoOptionsSet,
217 SNoDestinationDirectory,
218 SNosourceDirectory,
219 SNoUninstallFile,
220 SOptionNeedsClient,
221 SOptionNeedsServer,
222 SInvalidOption,
223 SInvalidOnErrorResult,
224 SInvalidOnStatusResult
225 );
226
227
228
229 procedure IBInstallerError(ECode: TIBInstallerError; const Args: array of const);
230 begin
231 raise EIBInstallerError.Create(ECode, Format(IBInstallerMessages[ECode], Args));
232 end;
233
234 function ErrorCallback(IscCode: MSG_NO; UserContext: Pointer; const ActionDescription:
235 TEXT): Integer; stdcall;
236 begin
237 Result := TIBSetup(UserContext).ErrorInternal(IscCode, ActionDescription);
238 end;
239
240 function StatusCallback(Status : Integer; UserContext: Pointer; const ActionDescription:
241 TEXT): Integer; stdcall;
242 begin
243 Result := TIBSetup(UserContext).StatusInternal(Status, ActionDescription);
244 end;
245
246 { TIBSetup }
247
248 function TIBSetup.ErrorInternal(IscCode: MSG_NO; const ActionDescription: TEXT):
249 Integer;
250 var
251 ErrorComment : string;
252 begin
253 if(ActionDescription <> nil) and (ActionDescription[0] <> #0) then
254 begin
255 SetLength(ErrorComment, StrLen(ActionDescription));
256 StrCopy(PChar(ErrorComment), ActionDescription);
257 end
258 else
259 ErrorComment := '';
260
261 if(Isccode = isc_install_fp_copy_delayed) or
262 (Isccode = isc_install_fp_delete_delayed) then
263 begin
264 FRebootToComplete := True;
265 Result := isc_install_fp_continue;
266 exit;
267 end;
268
269 if Assigned(FOnError) then
270 case FOnError(self, IscCode, GetInstallMessage(IscCode), ErrorComment) of
271 erAbort:
272 Result := isc_install_fp_abort;
273 erContinue:
274 Result := isc_install_fp_continue;
275 erRetry:
276 Result := isc_install_fp_retry;
277 else
278 Result := isc_install_fp_abort;
279 end
280 else
281 Result := isc_install_fp_abort;
282 end;
283
284 function TIBSetup.StatusInternal(Status: Integer; const ActionDescription: TEXT):
285 Integer;
286 var
287 StatusComment : string;
288 begin
289 FProgress := Status;
290 if(ActionDescription <> nil) and (ActionDescription[0] <> #0) then
291 begin
292 SetLength(StatusComment, StrLen(ActionDescription));
293 StrCopy(PChar(StatusComment), ActionDescription);
294 end
295 else
296 StatusComment := '';
297
298 if Assigned(FOnStatusChange) then
299 case FOnStatusChange(self, StatusComment) of
300 srAbort:
301 Result := isc_install_fp_abort;
302 srContinue:
303 Result := isc_install_fp_continue;
304 else
305 Result := isc_install_fp_continue;
306 end
307 else
308 Result := isc_install_fp_continue;
309 end;
310
311 procedure TIBSetup.SetMsgFilePath(const Value: string);
312 begin
313 if FMsgFilePath <> Value then
314 begin
315 Call(isc_install_load_external_text(PChar(Value)));
316 FMsgFilePath := Value;
317 end;
318 end;
319
320 procedure TIBSetup.Call(IscCode: MSG_NO);
321 begin
322 if IscCode = isc_install_success then
323 Exit;
324
325 if IscCode < isc_install_success then
326 begin
327 if Assigned(FOnWarning) then
328 begin
329 if FOnWarning(self, IscCode, GetInstallMessage(IscCode)) = wrAbort then
330 IBInstallError(IscCode);
331 Exit;
332 end
333 else
334 IBInstallError(IscCode);
335 end;
336 IBInstallError(IscCode);
337 end;
338
339 procedure TIBSetup.IBInstallError(IscCode: MSG_NO);
340 begin
341 raise EIBInstallError.Create(IscCode, GetInstallMessage(IscCode));
342 end;
343
344 function TIBSetup.GetInstallMessage(IscCode : MSG_NO) : string;
345 var
346 status : MSG_NO;
347 IscMessage : string;
348 begin
349 SetLength(IscMessage, ISC_INSTALL_MAX_MESSAGE_LEN * 2);
350 status := isc_install_get_message(0, IscCode, PChar(IscMessage),
351 ISC_INSTALL_MAX_MESSAGE_LEN * 2);
352
353 if status <> isc_install_success then
354 isc_install_get_message(0, status, PChar(IscMessage),
355 ISC_INSTALL_MAX_MESSAGE_LEN * 2);
356
357 SetLength(IscMessage, StrLen(PChar(IscMessage)));
358 result := IscMessage;
359 end;
360
361 constructor TIBSetup.Create(AOwner : TComponent);
362 begin
363 inherited Create(AOwner);
364 FIBInstallLoaded := False;
365 CheckIBInstallLoaded;
366 FIBInstallLoaded := True;
367 FRebootToComplete := False;
368 FProgress := 0;
369 end;
370
371 { TIBInstall }
372
373 constructor TIBInstall.Create(AOwner: TComponent);
374 begin
375 inherited Create(AOwner);
376 FIBInstallLoaded := False;
377 CheckIBInstallLoaded;
378 FIBInstallLoaded := True;
379 FInstallOptions := TInstallOptions.Create;
380 SuggestDestination;
381 end;
382
383 destructor TIBInstall.Destroy;
384 begin
385 if FIBInstallLoaded then
386 FInstallOptions.Free;
387 inherited;
388 end;
389
390 procedure TIBInstall.InstallCheck;
391 var
392 Handle : OPTIONS_HANDLE;
393 SrcDir, DestDir : PChar;
394 begin
395 Handle := 0;
396 InternalSetOptions(@Handle);
397
398 if FSourceDir = '' then
399 SrcDir := nil
400 else
401 SrcDir := PChar(FSourceDir);
402
403 if FDestinationDir = '' then
404 DestDir := nil
405 else
406 DestDir := PChar(FDestinationDir);
407
408 try
409 Call(isc_install_precheck(Handle, SrcDir, DestDir));
410 finally
411 isc_install_clear_options(@Handle);
412 end;
413 end;
414
415 procedure TIBInstall.InstallExecute;
416 var
417 Handle : OPTIONS_HANDLE;
418 begin
419 Handle := 0;
420 InternalSetOptions(@Handle);
421
422 if Handle = 0 then
423 IBInstallerError(ieNoOptionsSet, []);
424
425 try
426 SetLength(FUninstallFile, ISC_INSTALL_MAX_PATH);
427 Call(isc_install_execute(Handle, PChar(FSourceDir), PChar(FDestinationDir),
428 StatusCallback, Pointer(self), ErrorCallback,
429 Pointer(self), PChar(FUninstallFile)));
430 SetLength(FUninstallFile, StrLen(PChar(FUninstallFile)));
431 finally
432 isc_install_clear_options(@Handle);
433 end;
434 end;
435
436 procedure TIBInstall.InternalSetOptions(pHandle: POPTIONS_HANDLE);
437 begin
438 with FInstallOptions do
439 begin
440 if FMainComponents <> [] then
441 begin
442 if moClient in FMainComponents then
443 isc_install_set_option(pHandle, IB_CLIENT);
444 if moDevelopment in FMainComponents then
445 isc_install_set_option(pHandle, IB_DEV);
446 if moServer in FMainComponents then
447 isc_install_set_option(pHandle, IB_SERVER);
448 if moDocumentation in FMainComponents then
449 isc_install_set_option(pHandle, IB_DOC);
450 if moConServer in FMainComponents then
451 isc_install_set_option(pHandle, IB_CONNECTIVITY_SERVER);
452 if moGuiTools in FMainComponents then
453 isc_install_set_option(pHandle, IB_GUI_TOOLS);
454 end;
455
456 if FExamples <> [] then
457 begin
458 if exDB in FExamples then
459 isc_install_set_option(pHandle, IB_EXAMPLE_DB);
460 if exAPI in FExamples then
461 isc_install_set_option(pHandle, IB_EXAMPLE_API);
462 end;
463
464 if FCmdLineTools <> [] then
465 begin
466 if cmDBMgmt in FCmdLineTools then
467 isc_install_set_option(pHandle, IB_CMD_TOOLS_DB_MGMT);
468 if cmDBQuery in FCmdLineTools then
469 isc_install_set_option(pHandle, IB_CMD_TOOLS_DB_QUERY);
470 if cmUsrMgmt in FCmdLineTools then
471 isc_install_set_option(pHandle, IB_CMD_TOOLS_USR_MGMT);
472 end;
473
474 if FConnectivityClients <> [] then
475 begin
476 if cnODBC in FConnectivityClients then
477 isc_install_set_option(pHandle, IB_ODBC_CLIENT);
478 if cnOLEDB in FConnectivityClients then
479 isc_install_set_option(pHandle, IB_OLEDB_CLIENT);
480 if cnJDBC in FConnectivityClients then
481 isc_install_set_option(pHandle, IB_JDBC_CLIENT);
482 end;
483 end;
484 end;
485
486 procedure TIBInstall.SetDestination(const Value: string);
487 var
488 IscCode : MSG_NO;
489 begin
490 if Value <> '' then
491 begin
492 IscCode := isc_install_precheck(0, nil, PChar(Value));
493 if(IscCode > isc_install_success) then
494 IBInstallError(IscCode);
495 end;
496 FDestinationDir := Value;
497 end;
498
499 procedure TIBInstall.SetInstallOptions(const Value: TInstallOptions);
500 begin
501 if FInstallOptions <> Value then
502 FInstallOptions.Assign(Value);
503 end;
504
505 procedure TIBInstall.SetSource(const Value: string);
506 var
507 IscCode : MSG_NO;
508 begin
509 if Value <> '' then
510 begin
511 IscCode := isc_install_precheck(0, PChar(Value), nil);
512 if(IscCode > isc_install_success) then
513 IBInstallError(IscCode);
514 end;
515 FSourceDir := Value;
516 end;
517
518 procedure TIBInstall.SuggestDestination;
519 begin
520 SetLength(FSuggestedDestination, ISC_INSTALL_MAX_PATH);
521 Call(isc_install_get_info(isc_install_info_destination, 0, PChar(FSuggestedDestination),
522 ISC_INSTALL_MAX_PATH));
523 SetLength(FSuggestedDestination, StrLen(PChar(FSuggestedDestination)));
524 end;
525
526 function TIBInstall.GetOptionDescription(Option: TExamplesOption): string;
527 var
528 OptionDesc : string;
529 begin
530 SetLength(OptionDesc, ISC_INSTALL_MAX_MESSAGE_LEN);
531 GetOptionProperty(isc_install_info_opdescription, Option, PChar(OptionDesc),
532 ISC_INSTALL_MAX_MESSAGE_LEN);
533 SetLength(OptionDesc, StrLen(PChar(OptionDesc)));
534 Result := OptionDesc;
535 end;
536
537 function TIBInstall.GetOptionDescription(Option: TCmdOption): string;
538 var
539 OptionDesc : string;
540 begin
541 SetLength(OptionDesc, ISC_INSTALL_MAX_MESSAGE_LEN);
542 GetOptionProperty(isc_install_info_opdescription, Option, PChar(OptionDesc),
543 ISC_INSTALL_MAX_MESSAGE_LEN);
544 SetLength(OptionDesc, StrLen(PChar(OptionDesc)));
545 Result := OptionDesc;
546 end;
547
548 function TIBInstall.GetOptionDescription(Option: TConnectivityOption): string;
549 var
550 OptionDesc : string;
551 begin
552 SetLength(OptionDesc, ISC_INSTALL_MAX_MESSAGE_LEN);
553 GetOptionProperty(isc_install_info_opdescription, Option, PChar(OptionDesc),
554 ISC_INSTALL_MAX_MESSAGE_LEN);
555 SetLength(OptionDesc, StrLen(PChar(OptionDesc)));
556 Result := OptionDesc;
557 end;
558
559 function TIBInstall.GetOptionDescription(Option: TMainOption): string;
560 var
561 OptionDesc : string;
562 begin
563 SetLength(OptionDesc, ISC_INSTALL_MAX_MESSAGE_LEN);
564 GetOptionProperty(isc_install_info_opdescription, Option, PChar(OptionDesc),
565 ISC_INSTALL_MAX_MESSAGE_LEN);
566 SetLength(OptionDesc, StrLen(PChar(OptionDesc)));
567 Result := OptionDesc;
568 end;
569
570 function TIBInstall.GetOptionName(Option: TExamplesOption): string;
571 var
572 OptionName : string;
573 begin
574 SetLength(OptionName, ISC_INSTALL_MAX_MESSAGE_LEN);
575 GetOptionProperty(isc_install_info_opname, Option, PChar(OptionName),
576 ISC_INSTALL_MAX_MESSAGE_LEN);
577 SetLength(OptionName, StrLen(PChar(OptionName)));
578 Result := OptionName;
579 end;
580
581 function TIBInstall.GetOptionName(Option: TCmdOption): string;
582 var
583 OptionName : string;
584 begin
585 SetLength(OptionName, ISC_INSTALL_MAX_MESSAGE_LEN);
586 GetOptionProperty(isc_install_info_opname, Option, PChar(OptionName),
587 ISC_INSTALL_MAX_MESSAGE_LEN);
588 SetLength(OptionName, StrLen(PChar(OptionName)));
589 Result := OptionName;
590 end;
591
592 function TIBInstall.GetOptionName(Option: TConnectivityOption): string;
593 var
594 OptionName : string;
595 begin
596 SetLength(OptionName, ISC_INSTALL_MAX_MESSAGE_LEN);
597 GetOptionProperty(isc_install_info_opname, Option, PChar(OptionName),
598 ISC_INSTALL_MAX_MESSAGE_LEN);
599 SetLength(OptionName, StrLen(PChar(OptionName)));
600 Result := OptionName;
601 end;
602
603 function TIBInstall.GetOptionName(Option: TMainOption): string;
604 var
605 OptionName : string;
606 begin
607 SetLength(OptionName, ISC_INSTALL_MAX_MESSAGE_LEN);
608 GetOptionProperty(isc_install_info_opname, Option, PChar(OptionName),
609 ISC_INSTALL_MAX_MESSAGE_LEN);
610 SetLength(OptionName, StrLen(PChar(OptionName)));
611 Result := OptionName;
612 end;
613
614 function TIBInstall.GetOptionSpaceRequired(Option: TExamplesOption): longword;
615 var
616 OptionSpace : Longword;
617 begin
618 GetOptionProperty(isc_install_info_opspace, Option, @OptionSpace,
619 Cardinal(SizeOf(OptionSpace)));
620 Result := OptionSpace;
621 end;
622
623 function TIBInstall.GetOptionSpaceRequired(Option: TMainOption): longword;
624 var
625 OptionSpace : Longword;
626 begin
627 GetOptionProperty(isc_install_info_opspace, Option, @OptionSpace,
628 Cardinal(SizeOf(OptionSpace)));
629 Result := OptionSpace;
630 end;
631
632 function TIBInstall.GetOptionSpaceRequired(Option: TConnectivityOption): longword;
633 var
634 OptionSpace : Longword;
635 begin
636 GetOptionProperty(isc_install_info_opspace, Option, @OptionSpace,
637 Cardinal(SizeOf(OptionSpace)));
638 Result := OptionSpace;
639 end;
640
641 function TIBInstall.GetOptionSpaceRequired(Option: TCmdOption): longword;
642 var
643 OptionSpace : Longword;
644 begin
645 GetOptionProperty(isc_install_info_opspace, Option, @OptionSpace,
646 Cardinal(SizeOf(OptionSpace)));
647 Result := OptionSpace;
648 end;
649
650 procedure TIBInstall.GetOptionProperty(InfoType: Integer; Option : TMainOption;
651 Buffer: Pointer; BufferLen : Cardinal);
652 var
653 IscOption : OPT;
654 begin
655 case Option of
656 moClient:
657 IscOption := IB_CLIENT;
658 moDevelopment:
659 IscOption := IB_DEV;
660 moServer:
661 IscOption := IB_SERVER;
662 moDocumentation:
663 IscOption := IB_DOC;
664 moGuiTools:
665 IscOption := IB_GUI_TOOLS;
666 else
667 IscOption := IB_CONNECTIVITY_SERVER;
668 end;
669 Call(isc_install_get_info(InfoType, IscOption, Buffer, BufferLen));
670 end;
671
672 procedure TIBInstall.GetOptionProperty(InfoType: Integer; Option: TExamplesOption;
673 Buffer: Pointer; BufferLen : Cardinal);
674 var
675 IscOption : OPT;
676 begin
677 case Option of
678 exDB:
679 IscOption := IB_EXAMPLE_DB;
680 else
681 IscOption := IB_EXAMPLE_API;
682 end;
683 Call(isc_install_get_info(InfoType, IscOption, Buffer, BufferLen));
684 end;
685
686 procedure TIBInstall.GetOptionProperty(InfoType: Integer; Option: TCmdOption;
687 Buffer: Pointer; BufferLen : Cardinal);
688 var
689 IscOption : OPT;
690 begin
691 case Option of
692 cmDBMgmt:
693 IscOption := IB_CMD_TOOLS_DB_MGMT;
694 cmDBQuery:
695 IscOption := IB_CMD_TOOLS_DB_QUERY;
696 else
697 IscOption := IB_CMD_TOOLS_USR_MGMT;
698 end;
699 Call(isc_install_get_info(InfoType, IscOption, Buffer, BufferLen));
700 end;
701
702 procedure TIBInstall.GetOptionProperty(InfoType: Integer; Option: TConnectivityOption;
703 Buffer: Pointer; BufferLen : Cardinal);
704 var
705 IscOption : OPT;
706 begin
707 case Option of
708 cnODBC:
709 IscOption := IB_ODBC_CLIENT;
710 cnOLEDB:
711 IscOption := IB_OLEDB_CLIENT;
712 else
713 IscOption := IB_JDBC_CLIENT;
714 end;
715 Call(isc_install_get_info(InfoType, IscOption, Buffer, BufferLen));
716 end;
717
718 { TIBUnInstall }
719
720 procedure TIBUnInstall.UnInstallCheck;
721 begin
722 if FUninstallFile = '' then
723 IBInstallerError(ieNoUninstallFile, []);
724
725 Call(isc_uninstall_precheck(PChar(FUninstallFile)));
726 end;
727
728 procedure TIBUnInstall.UnInstallExecute;
729 begin
730 if FUninstallFile = '' then
731 IBInstallerError(ieNoUninstallFile, []);
732
733 Call(isc_uninstall_execute(PChar(FUninstallFile), StatusCallback, Pointer(self),
734 ErrorCallback, Pointer(self)));
735 end;
736
737 { EIBInstall }
738
739 constructor EIBInstall.Create(IscCode: MSG_NO; IscMessage: string);
740 begin
741 inherited Create(IscMessage);
742 FIscError := IscCode;
743 FInstallerError := ieSuccess;
744 end;
745
746 constructor EIBInstall.Create(ECode: TIBInstallerError; EMessage: string);
747 begin
748 inherited Create(EMessage);
749 FInstallerError := ECode;
750 FIscError := isc_install_success;
751 end;
752
753 end.