mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 18:03:03 +01:00
Add supporting files to build Win32 packages
This commit is contained in:
parent
6b088974c5
commit
2d1b902d28
@ -0,0 +1,697 @@
|
||||
(* Initial Developer's Public License.
|
||||
The contents of this file are subject to the Initial Developer's Public
|
||||
License Version 1.0 (the "License"). You may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
http://www.ibphoenix.com?a=ibphoenix&page=ibp_idpl
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
for the specific language governing rights and limitations under the
|
||||
License.
|
||||
|
||||
The Original Code is copyright 2001-2003 Paul Reeves for IBPhoenix.
|
||||
|
||||
The Initial Developer of the Original Code is Paul Reeves for IBPhoenix.
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
This file contains a whole bunch of functions that
|
||||
check the registry and see what versions of firebird or interbase
|
||||
are already installed.
|
||||
|
||||
This stuff _is_ firebird/interbase specific and some of it is entirely dependant
|
||||
upon parts of the InnoSetup install script.
|
||||
|
||||
Here is a list of functions available in this script:
|
||||
|
||||
function ClassicInstallChosen: Boolean;
|
||||
|
||||
procedure SetupSharedFilesArray;
|
||||
procedure GetSharedLibCountBeforeCopy;
|
||||
procedure CheckSharedLibCountAtEnd;
|
||||
|
||||
function GetFirebirdDir: string;
|
||||
function GetInterBaseDir: string;
|
||||
function TestForWorkingInstalls: boolean;
|
||||
|
||||
function FirebirdOneRunning: boolean;
|
||||
|
||||
function InstallCPLApplet: boolean;
|
||||
function ShowInstallCPLAppletTask: boolean;
|
||||
function CopyGds32: boolean;
|
||||
function ShowCopyGds32Task: boolean;
|
||||
function CopyFbClientLib: boolean;
|
||||
function ShowCopyFbClientLibTask: boolean;
|
||||
|
||||
|
||||
*)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Registry keys for Firebird and InterBase
|
||||
Const
|
||||
//All InterBase and Firebird 1.0.n except IB5.n
|
||||
IBRegKey = 'SOFTWARE\Borland\InterBase\CurrentVersion';
|
||||
//IB5.n
|
||||
IB5RegKey = 'SOFTWARE\InterBase Corp\InterBase\CurrentVersion';
|
||||
//Fb15 RC
|
||||
FB15RCKey = 'SOFTWARE\FirebirdSQL\Firebird\CurrentVersion';
|
||||
FB15RCKeyRoot = 'SOFTWARE\FirebirdSQL';
|
||||
|
||||
//All IB, Fb 1.0 and Fb 1.5RC's use RootDirectory entry
|
||||
LegacyRegPathEntry = 'RootDirectory';
|
||||
|
||||
//Firebird 1.5 and beyond
|
||||
FB2RegKey = 'SOFTWARE\Firebird Project\Firebird Server\Instances';
|
||||
|
||||
FBRegPathEntry = 'DefaultInstance'; //Stores path to root
|
||||
|
||||
IB4MessageFile = 'interbas.msg';
|
||||
IBMessageFile = 'interbase.msg'; //IB5, IB6, IB7 and Fb 1.0
|
||||
FBMessageFile = 'firebird.msg'; //Fb2 codebase
|
||||
|
||||
IBDesc = 'InterBase %s ';
|
||||
FBDesc = 'Firebird %s ';
|
||||
|
||||
|
||||
|
||||
Const
|
||||
//Install Types
|
||||
NotInstalled = 0;
|
||||
ClientInstall = 1;
|
||||
AdminInstall = 2;
|
||||
SuperServerInstall = 4;
|
||||
ClassicServerInstall = 8;
|
||||
BrokenInstall = 32; //version or component mismatch found, so mark broken
|
||||
|
||||
//Possible product installs
|
||||
IB4Install = 0;
|
||||
IB5Install = 1;
|
||||
IB6Install = 2;
|
||||
IB65Install = 3;
|
||||
IB7Install = 4;
|
||||
FB1Install = 5;
|
||||
FB15RCInstall = 6;
|
||||
FB15Install = 7;
|
||||
FB2Install = 8; //All Fb 1.6 and beyond
|
||||
MaxProdInstalled = FB2Install;
|
||||
|
||||
//ProductsInstalled
|
||||
IB4 = $0001;
|
||||
IB5 = $0002;
|
||||
IB6 = $0004;
|
||||
IB65 = $0008;
|
||||
IB7 = $0010;
|
||||
FB1 = $0020;
|
||||
FB15RC = $0040;
|
||||
FB15 = $0080;
|
||||
FB2 = $0100;
|
||||
|
||||
Const
|
||||
Install = 1;
|
||||
Configure = 2;
|
||||
|
||||
Var
|
||||
ProductsInstalled: Integer;
|
||||
ProductsInstalledCount: Integer;
|
||||
InstallAndConfigure: Integer;
|
||||
|
||||
Type
|
||||
TProduct = record
|
||||
ProductID: Integer;
|
||||
Description: String;
|
||||
RegKey: String;
|
||||
RegEntry: String;
|
||||
RegVersion: String;
|
||||
MessageFile: String;
|
||||
Path: String;
|
||||
ClientVersion: String;
|
||||
GBAKVersion: String;
|
||||
ServerVersion: String;
|
||||
InstallType: Integer;
|
||||
ActualVersion: String;
|
||||
FirebirdVersion:String;
|
||||
end;
|
||||
|
||||
|
||||
Var
|
||||
ProductsInstalledArray: Array of TProduct;
|
||||
|
||||
procedure InitExistingInstallRecords;
|
||||
var
|
||||
product: Integer;
|
||||
begin
|
||||
SetArrayLength(ProductsInstalledArray,MaxProdInstalled + 1);
|
||||
for product := 0 to MaxProdInstalled do begin
|
||||
|
||||
ProductsInstalledArray[product].ProductID := product;
|
||||
|
||||
case product of
|
||||
|
||||
IB4Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IB4MessageFile;
|
||||
end;
|
||||
|
||||
IB5Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IB5RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
end;
|
||||
|
||||
IB6Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
end;
|
||||
|
||||
IB65Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
end;
|
||||
|
||||
IB7Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
end;
|
||||
|
||||
FB1Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
end;
|
||||
|
||||
FB15RCInstall: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc;
|
||||
ProductsInstalledArray[product].RegKey := FB15RCKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
end;
|
||||
|
||||
FB15Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc;
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
end;
|
||||
|
||||
FB2Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc;
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
end;
|
||||
|
||||
end; //case
|
||||
end; //for
|
||||
end; //function
|
||||
|
||||
|
||||
function GetRegistryEntry(RegKey, RegEntry: string): String;
|
||||
begin
|
||||
result := '';
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE, RegKey, RegEntry, Result);
|
||||
end;
|
||||
|
||||
|
||||
Procedure AnalyzeEnvironment;
|
||||
var
|
||||
product: Integer;
|
||||
gds32VersionString: String;
|
||||
VerInt: Array of Integer;
|
||||
BoolOne, BoolTwo, BoolEval: Boolean;
|
||||
EvalOne, EvalTwo: Integer;
|
||||
begin
|
||||
|
||||
ProductsInstalled := 0;
|
||||
ProductsInstalledCount := 0;
|
||||
|
||||
//Test for gds32 version in <sys>
|
||||
if FileExists(GetSysPath+'\gds32.dll') then begin
|
||||
gds32VersionString := GetInstalledVersion(GetSysPath+'\gds32.dll',VerInt);
|
||||
end;
|
||||
|
||||
for product := 0 to MaxProdInstalled -1 do begin
|
||||
|
||||
ProductsInstalledArray[product].Path := GetRegistryEntry(
|
||||
ProductsInstalledArray[product].RegKey, ProductsInstalledArray[product].RegEntry);
|
||||
|
||||
ProductsInstalledArray[product].RegVersion := GetRegistryEntry(
|
||||
ProductsInstalledArray[product].RegKey, 'Version');
|
||||
|
||||
|
||||
if FileExists(ProductsInstalledArray[product].Path + '\bin\fbclient.dll') then
|
||||
ProductsInstalledArray[product].ClientVersion := GetInstalledVersion(
|
||||
ProductsInstalledArray[product].Path + '\bin\fbclient.dll',VerInt)
|
||||
else
|
||||
ProductsInstalledArray[product].ClientVersion := gds32VersionString;
|
||||
|
||||
If (ProductsInstalledArray[product].Path<>'') AND (ProductsInstalledArray[product].ClientVersion <> '') AND
|
||||
(FileExists(ProductsInstalledArray[product].Path+'\'+ProductsInstalledArray[product].MessageFile)) then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + ClientInstall
|
||||
else
|
||||
//The minimum requirements for a working client don't exist, so ignore this product.
|
||||
Continue;
|
||||
|
||||
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
|
||||
GetVersionNumbersString( ProductsInstalledArray[product].Path+'\bin\gbak.exe',
|
||||
ProductsInstalledArray[product].GBAKVersion);
|
||||
If ProductsInstalledArray[product].GBAKVersion <> '' then begin
|
||||
ProductsInstalledArray[product].ActualVersion:=ProductsInstalledArray[product].GBAKVersion;
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + AdminInstall;
|
||||
end;
|
||||
|
||||
if FileExists(ProductsInstalledArray[product].Path+'\bin\fb_inet_server.exe') then begin
|
||||
GetVersionNumbersString( ProductsInstalledArray[product].Path+'\bin\fb_inet_server.exe',
|
||||
ProductsInstalledArray[product].ServerVersion);
|
||||
If ProductsInstalledArray[product].ServerVersion <> '' then begin
|
||||
ProductsInstalledArray[product].ActualVersion:=ProductsInstalledArray[product].ServerVersion;
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + ClassicServerInstall;
|
||||
end;
|
||||
end;
|
||||
|
||||
if FileExists(ProductsInstalledArray[product].Path+'\bin\fbserver.exe') then begin
|
||||
GetVersionNumbersString( ProductsInstalledArray[product].Path+'\bin\fbserver.exe',
|
||||
ProductsInstalledArray[product].ServerVersion);
|
||||
If ProductsInstalledArray[product].ServerVersion <> '' then begin
|
||||
ProductsInstalledArray[product].ActualVersion:=ProductsInstalledArray[product].ServerVersion;
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + SuperServerInstall;
|
||||
end;
|
||||
end;
|
||||
|
||||
if FileExists(ProductsInstalledArray[product].Path+'\bin\ibserver.exe') then begin
|
||||
GetVersionNumbersString( ProductsInstalledArray[product].Path+'\bin\ibserver.exe',
|
||||
ProductsInstalledArray[product].ServerVersion);
|
||||
If ProductsInstalledArray[product].ServerVersion <> '' then begin
|
||||
ProductsInstalledArray[product].ActualVersion:=ProductsInstalledArray[product].ServerVersion;
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + SuperServerInstall;
|
||||
end;
|
||||
end;
|
||||
|
||||
//Now, resolve version numbers. If the version number
|
||||
// Likely values for installed versions of Firebird are:
|
||||
// [6,0,n,n] InterBase 6.0
|
||||
// [6,2,0,nnn] Firebird 1.0.0
|
||||
// [6,2,2,nnn] Firebird 1.0.2
|
||||
// [6,2,3,nnn] Firebird 1.0.3
|
||||
// [6,5,n,n] InterBase 6.5
|
||||
// [6,3,0,nnnn] Firebird 1.5.0
|
||||
// [7,0,n,n] InterBase 7.0
|
||||
|
||||
case product of
|
||||
IB4Install: begin
|
||||
//If we get here we must have an install, because the message file is unique to 4.n
|
||||
ProductsInstalled := ProductsInstalled + IB4;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
//check to see if the client library matches the server version installed.
|
||||
if CompareVersion(ProductsInstalledArray[product].ActualVersion, '4.0.0.0',1) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
|
||||
end;
|
||||
|
||||
IB5Install: begin
|
||||
//If we get here we must have an install, because the registry key is unique to 5.n
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB5;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
//check to see if the client library matches the server version installed.
|
||||
if CompareVersion(ProductsInstalledArray[product].ActualVersion, '5.0.0.0',1) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
end;
|
||||
|
||||
IB6Install: begin
|
||||
//If we get here we have ambiguity with other versions of InterBase and Firebird
|
||||
if ( pos('InterBase',ProductsInstalledArray[product].RegVersion) > 0 ) then begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '6.0.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB6;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
IB65Install: begin
|
||||
//If we get here we have ambiguity with other versions of InterBase and Firebird
|
||||
if ( pos('InterBase',ProductsInstalledArray[product].RegVersion) > 0 ) then begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '6.5.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB65;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
IB7Install: begin
|
||||
//If we get here we have ambiguity with other versions of InterBase and Firebird
|
||||
if ( pos('InterBase',ProductsInstalledArray[product].RegVersion) > 0 ) then begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '7.0.0.0',1) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB7;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
FB1Install: begin
|
||||
if ( pos('Firebird',ProductsInstalledArray[product].RegVersion) > 0 ) then begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '6.2.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB1;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
ProductsInstalledArray[product].ActualVersion := ConvertIBVerStrToFbVerStr(ProductsInstalledArray[product].ActualVersion);
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
FB15RCInstall: begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '1.5.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB15RC;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
FB15Install: begin
|
||||
if CompareVersion(ProductsInstalledArray[product].ClientVersion, '1.5.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB15;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
FB2Install: begin
|
||||
//We don't know (yet) what we should be comparing against here, ClientVersion
|
||||
//should be equal or greater than 1.6.0.0
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '1.6.0.0',2) < 0) then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB2;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;//case
|
||||
|
||||
|
||||
if ((ProductsInstalledArray[product].InstallType <> NotInstalled) AND
|
||||
//Check that we haven't already flagged the install as broken.
|
||||
((ProductsInstalledArray[product].InstallType AND BrokenInstall)<>BrokenInstall)) then begin
|
||||
|
||||
//Now test that the version strings match!
|
||||
if (CompareStr(ProductsInstalledArray[product].ClientVersion, ProductsInstalledArray[product].GBAKVersion)<> 0) then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall
|
||||
else
|
||||
if (CompareStr(ProductsInstalledArray[product].ClientVersion, ProductsInstalledArray[product].ServerVersion )<> 0) then
|
||||
ProductsInstalledArray[product].InstallType := ProductsInstalledArray[product].InstallType + BrokenInstall;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
end; //if ((ProductsInstalledArray[product].InstallType AND ClientInstall)= ClientInstall) then begin
|
||||
end; //for
|
||||
end;
|
||||
|
||||
|
||||
Var
|
||||
InterBaseVer: Array of Integer;
|
||||
FirebirdVer: Array of Integer;
|
||||
|
||||
|
||||
function ClassicInstallChosen: Boolean;
|
||||
var
|
||||
SelectedComponents: String;
|
||||
begin
|
||||
result := false;
|
||||
|
||||
SelectedComponents := WizardSelectedComponents(false);
|
||||
if pos(lowercase('ClassicServerComponent'),SelectedComponents) >0 then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
/////=======================================
|
||||
|
||||
|
||||
|
||||
Type
|
||||
TSharedFileArrayRecord = record
|
||||
Filename: String;
|
||||
Count: Integer;
|
||||
end;
|
||||
|
||||
var
|
||||
SharedFileArray: Array of TSharedFileArrayRecord;
|
||||
|
||||
|
||||
|
||||
procedure SetupSharedFilesArray;
|
||||
//All shared files go in this list. Use
|
||||
// find /n "sharedfile" FirebirdInstall_15.iss
|
||||
//to list them in the order they appear in the setup script
|
||||
begin
|
||||
SetArrayLength(SharedFileArray,24);
|
||||
|
||||
SharedFileArray[0].Filename := ExpandConstant('{app}')+'\IPLicense.txt';
|
||||
SharedFileArray[1].Filename := ExpandConstant('{app}')+'\IDPLicense.txt';
|
||||
SharedFileArray[2].Filename := ExpandConstant('{app}')+'\firebird.msg';
|
||||
SharedFileArray[3].Filename := ExpandConstant('{app}')+'\bin\gbak.exe';
|
||||
SharedFileArray[4].Filename := ExpandConstant('{app}')+'\bin\gfix.exe';
|
||||
SharedFileArray[5].Filename := ExpandConstant('{app}')+'\bin\gsec.exe';
|
||||
SharedFileArray[6].Filename := ExpandConstant('{app}')+'\bin\gsplit.exe';
|
||||
SharedFileArray[7].Filename := ExpandConstant('{app}')+'\bin\gstat.exe';
|
||||
SharedFileArray[8].Filename := ExpandConstant('{app}')+'\bin\fbguard.exe';
|
||||
SharedFileArray[9].Filename := ExpandConstant('{app}')+'\bin\fb_lock_print.exe';
|
||||
|
||||
if ClassicInstallChosen then
|
||||
SharedFileArray[10].Filename := ExpandConstant('{app}')+'\bin\fb_inet_server.exe'
|
||||
else
|
||||
SharedFileArray[10].Filename := ExpandConstant('{app}')+'\bin\fbserver.exe';
|
||||
|
||||
SharedFileArray[11].Filename := ExpandConstant('{app}')+'\bin\ib_util.dll';
|
||||
SharedFileArray[12].Filename := ExpandConstant('{app}')+'\bin\instclient.exe';
|
||||
SharedFileArray[13].Filename := ExpandConstant('{app}')+'\bin\instreg.exe';
|
||||
SharedFileArray[14].Filename := ExpandConstant('{app}')+'\bin\instsvc.exe';
|
||||
|
||||
SharedFileArray[15].Filename := ExpandConstant('{sys}')+'\gds32.dll';
|
||||
SharedFileArray[16].Filename := ExpandConstant('{sys}')+'\fbclient.dll';
|
||||
|
||||
SharedFileArray[17].Filename := ExpandConstant('{app}')+'\bin\fbclient.dll';
|
||||
|
||||
SharedFileArray[18].Filename := ExpandConstant('{app}')+'\bin\msvcrt.dll';
|
||||
SharedFileArray[19].Filename := ExpandConstant('{app}')+'\bin\msvcp{#msvc_version}0.dll';
|
||||
|
||||
SharedFileArray[20].Filename := ExpandConstant('{app}')+'\bin\fbintl.dll';
|
||||
|
||||
SharedFileArray[21].Filename := ExpandConstant('{app}')+'\UDF\ib_udf.dll';
|
||||
SharedFileArray[22].Filename := ExpandConstant('{app}')+'\UDF\fbudf.dll';
|
||||
|
||||
|
||||
if UsingWinNT then
|
||||
SharedFileArray[23].Filename := ExpandConstant('{sys}')+'\Firebird2Control.cpl'
|
||||
else
|
||||
SharedFileArray[23].Filename := ExpandConstant('{sys}')+'\FIREBI~1.CPL';
|
||||
|
||||
|
||||
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure GetSharedLibCountBeforeCopy;
|
||||
var
|
||||
dw: Cardinal;
|
||||
i: Integer;
|
||||
begin
|
||||
for i:= 0 to GetArrayLength(SharedFileArray)-1 do begin
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs',SharedFileArray[i].filename, dw) then
|
||||
SharedFileArray[i].Count := dw
|
||||
else
|
||||
SharedFileArray[i].Count := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure CheckSharedLibCountAtEnd;
|
||||
// If a shared file exists on disk (from a manual install perhaps?) then
|
||||
// the Installer will set the SharedFile count to 2 even if no registry
|
||||
// entry exists. Is it a bug, an anomaly or a WAD?
|
||||
// Is it InnoSetup or the O/S?
|
||||
// Anyway, let's work around it, otherwise the files will appear 'sticky'
|
||||
// after an uninstall.
|
||||
|
||||
var
|
||||
dw: cardinal;
|
||||
i: Integer;
|
||||
|
||||
begin
|
||||
for i:= 0 to GetArrayLength(SharedFileArray)-1 do begin
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs',SharedFileArray[i].Filename, dw) then begin
|
||||
if (( dw - SharedFileArray[i].Count ) > 1 ) then begin
|
||||
dw := SharedFileArray[i].Count + 1 ;
|
||||
RegWriteDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs',SharedFileArray[i].Filename, dw);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
///===================================================
|
||||
|
||||
function GetFirebirdDir: string;
|
||||
//Check if Firebird installed, get version info to global var and return root dir
|
||||
var
|
||||
FirebirdDir: String;
|
||||
begin
|
||||
FirebirdDir := '';
|
||||
FirebirdVer := [0,0,0,0];
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Firebird Project\Firebird Server\Instances','DefaultInstance', FirebirdDir);
|
||||
//If nothing returned then check for the registry entry used during beta/RC phase
|
||||
if (FirebirdDir='') then
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\FirebirdSQL\Firebird\CurrentVersion','RootDirectory', FirebirdDir);
|
||||
if (FirebirdDir<>'') then
|
||||
GetInstalledVersion(FirebirdDir+'\bin\gbak.exe', FirebirdVer);
|
||||
|
||||
Result := FirebirdDir;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function GetInterBaseDir: string;
|
||||
//Check if InterBase installed, get version info to global var and return root dir
|
||||
var
|
||||
InterBaseDir: String;
|
||||
begin
|
||||
InterBaseDir := '';
|
||||
InterBaseVer := [0,0,0,0];
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Borland\InterBase\CurrentVersion','RootDirectory', InterBaseDir);
|
||||
if ( InterBaseDir <> '' ) then
|
||||
GetInstalledVersion(InterBaseDir+'\bin\gbak.exe',InterBaseVer);
|
||||
|
||||
Result := InterBaseDir;
|
||||
end;
|
||||
|
||||
|
||||
function ConfigureFirebird: boolean;
|
||||
begin
|
||||
result := (InstallAndConfigure AND Configure) = Configure;
|
||||
end;
|
||||
|
||||
|
||||
function FirebirdOneRunning: boolean;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
result := false;
|
||||
|
||||
//Look for a running copy of InterBase or Firebird 1.0.
|
||||
i:=0;
|
||||
i:=FindWindowByClassName('IB_Server') ;
|
||||
if ( i<>0 ) then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
|
||||
function FirebirdOneFiveRunning: boolean;
|
||||
var
|
||||
Handle: Integer;
|
||||
begin
|
||||
result := False;
|
||||
//Look for a running version of Firebird 1.5 or later
|
||||
Handle:=FindWindowByClassName('FB_Disabled');
|
||||
if ( Handle=0 ) then
|
||||
Handle:=FindWindowByClassName('FB_Server');
|
||||
if ( Handle=0 ) then
|
||||
Handle:=FindWindowByClassName('FB_Guard');
|
||||
|
||||
if (Handle>0) then
|
||||
result := True;
|
||||
end;
|
||||
|
||||
|
||||
function InstallCPLApplet: boolean;
|
||||
begin
|
||||
result := False;
|
||||
if ( (ConfigureFirebird) AND (not NoCPL) ) then
|
||||
result := (ShouldProcessEntry('SuperServerComponent', 'InstallCPLAppletTask') = srYes) ;
|
||||
end;
|
||||
|
||||
|
||||
function ShowInstallCPLAppletTask: boolean;
|
||||
begin
|
||||
//If NOCPL is on the command line then don't offer the task in UI mode.
|
||||
result := ((not NoCPL) and ConfigureFirebird);
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function CopyGds32: boolean;
|
||||
begin
|
||||
//Note that we invert the value of NOLEGACYCLIENT so we provide the
|
||||
//correct answer to the question 'Do we copy GDS32 to <sys>' which is
|
||||
//the default behaviour.
|
||||
result := False;
|
||||
if ConfigureFirebird then begin
|
||||
//If one of these is false then either the commandline switch was passed
|
||||
//or the user unchecked the Copy client as GDS32 box
|
||||
result := ( (not NoLegacyClient) AND (ShouldProcessEntry('ClientComponent', 'CopyFbClientAsGds32Task')= srYes) );
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function ShowCopyGds32Task: boolean;
|
||||
begin
|
||||
//If NOGDS32 is on the command line then don't offer the task in UI mode.
|
||||
result := ((not NoLegacyClient) and ConfigureFirebird);
|
||||
end;
|
||||
|
||||
|
||||
function CopyFbClientLib: boolean;
|
||||
begin
|
||||
//Note that the default for this is the opposite to CopyGds32.
|
||||
result := ( (CopyFbClient) OR (ShouldProcessEntry('ClientComponent', 'CopyFbClientToSysTask')= srYes) );
|
||||
end;
|
||||
|
||||
|
||||
function ShowCopyFbClientLibTask: boolean;
|
||||
//See note for ShowCopyGds32Task.
|
||||
begin
|
||||
result := False;
|
||||
if ConfigureFirebird then
|
||||
result := ((not CopyFbClient) and ConfigureFirebird);
|
||||
end;
|
||||
|
@ -0,0 +1,247 @@
|
||||
(* Initial Developer's Public License.
|
||||
The contents of this file are subject to the Initial Developer's Public
|
||||
License Version 1.0 (the "License"). You may not use this file except
|
||||
in compliance with the License. You may obtain a copy of the License at
|
||||
http://www.ibphoenix.com?a=ibphoenix&page=ibp_idpl
|
||||
Software distributed under the License is distributed on an "AS IS" basis,
|
||||
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
for the specific language governing rights and limitations under the
|
||||
License.
|
||||
|
||||
The Original Code is copyright 2001-2003 Paul Reeves for IBPhoenix.
|
||||
|
||||
The Initial Developer of the Original Code is Paul Reeves for IBPhoenix.
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
Helper functions for FB installer
|
||||
|
||||
These are / ought to be fairly generic
|
||||
It makes more sense if they are independant functions - ie, they don't
|
||||
call other functions in the script and they don't need to know about the
|
||||
install script itself.
|
||||
|
||||
They can call functions in the pascal script library
|
||||
|
||||
Function Prototypes
|
||||
|
||||
function UsingWin2k: boolean;
|
||||
function UsingWinXP: boolean;
|
||||
function CheckWinsock2(): Boolean;
|
||||
function GetAppPath: String;
|
||||
function GetSysPath: String;
|
||||
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
|
||||
procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
|
||||
function CompareVersion( ver1, ver2: String ) : Integer;
|
||||
function GetInstalledVersion(BinaryFile: String): Array of Integer;
|
||||
function ConvertIBVerStrToFbVerStr( VerStr: String) : String;
|
||||
|
||||
|
||||
*)
|
||||
|
||||
(*
|
||||
InnoSetup Help Extract on Windows version strings:
|
||||
4.0.950 Windows 95
|
||||
4.0.1111 Windows 95 OSR 2 & OSR 2.1
|
||||
4.0.1212 Windows 95 OSR 2.5
|
||||
4.1.1998 Windows 98
|
||||
4.1.2222 Windows 98 Second Edition
|
||||
4.9.3000 Windows Me
|
||||
Windows NT versions:
|
||||
4.0.1381 Windows NT 4.0
|
||||
5.0.2195 Windows 2000
|
||||
5.01.2600 Windows XP
|
||||
5.2.3790 Windows 2003 Standard
|
||||
*)
|
||||
|
||||
function UsingWin2k: boolean;
|
||||
//return true if using Win2k OR later
|
||||
begin
|
||||
Result := (InstallOnThisVersion('0,5.0', '0,0') = irInstall);
|
||||
end;
|
||||
|
||||
|
||||
function UsingWinXP: boolean;
|
||||
// return true if using WinXP OR later.
|
||||
// Currently not used in this script.
|
||||
begin
|
||||
Result := (InstallOnThisVersion('0,5.01', '0,0') = irInstall);
|
||||
end;
|
||||
|
||||
|
||||
const
|
||||
sWinSock2 = 'ws2_32.dll';
|
||||
sNoWinsock2 = 'Please Install Winsock 2 Update before continuing';
|
||||
sMSWinsock2Update = 'http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp';
|
||||
sWinsock2Web = 'Winsock 2 is not installed.'#13#13'Would you like to Visit the Winsock 2 Update Home Page?';
|
||||
|
||||
var
|
||||
Winsock2Failure: Boolean;
|
||||
|
||||
function CheckWinsock2(): Boolean;
|
||||
begin
|
||||
Result := True;
|
||||
//Check if Winsock 2 is installed (win 95 only)
|
||||
if (not UsingWinNt) and (not FileExists(AddBackslash(GetSystemDir) + sWinSock2)) then begin
|
||||
Winsock2Failure := True;
|
||||
Result := False;
|
||||
end
|
||||
else
|
||||
Winsock2Failure := False;
|
||||
end;
|
||||
|
||||
|
||||
function GetAppPath: String;
|
||||
begin
|
||||
Result := ExpandConstant('{app}');
|
||||
// Result := '"' + Result +'"';
|
||||
end;
|
||||
|
||||
|
||||
function GetSysPath: String;
|
||||
begin
|
||||
Result := ExpandConstant('{sys}');
|
||||
// Result := '"' + Result +'"';
|
||||
end;
|
||||
|
||||
|
||||
(*Based on InnoSetup KB example at http://www13.brinkster.com/vincenzog/isxart.asp?idart=14)*)
|
||||
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
|
||||
var
|
||||
i: Integer;
|
||||
Lines: TArrayOfString;
|
||||
CommentSize: Integer;
|
||||
ArraySize: Integer;
|
||||
FileChanged: Boolean;
|
||||
TempStr: String;
|
||||
begin
|
||||
// Load textfile into string array
|
||||
LoadStringsFromFile(Filename, Lines);
|
||||
|
||||
FileChanged := false;
|
||||
CommentSize := Length(CommentType);
|
||||
ArraySize := GetArrayLength(Lines)-1;
|
||||
|
||||
// Search through all textlines for given text
|
||||
for i := 0 to ArraySize do begin
|
||||
// Overwrite textline when text searched for is part of it
|
||||
if Pos(StringToFind,Lines[i]) > 0 then begin
|
||||
// does this line start with a comment ?
|
||||
if CommentSize > 0 then begin
|
||||
TempStr := TrimLeft(Lines[i]);
|
||||
// only replace if line does not start with a comment
|
||||
if CompareText(Copy(TempStr,1,CommentSize),CommentType) <> 0 then begin
|
||||
Lines[i] := NewLine;
|
||||
FileChanged := true
|
||||
end
|
||||
end
|
||||
else begin
|
||||
Lines[i] := NewLine;
|
||||
FileChanged := true
|
||||
end
|
||||
end
|
||||
end;
|
||||
|
||||
// Save string array to textfile (overwrite, no append!)
|
||||
if FileChanged = true then
|
||||
SaveStringsToFile(Filename, Lines, false);
|
||||
|
||||
Result := FileChanged;
|
||||
end;
|
||||
|
||||
|
||||
procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
|
||||
var
|
||||
i,p: Integer; s: string;
|
||||
begin
|
||||
VerInt := [0,0,0,0];
|
||||
i := 0;
|
||||
while ( (Length(VerStr) > 0) and (i < 4) ) do begin
|
||||
p := pos('.', VerStr);
|
||||
if p > 0 then begin
|
||||
if p = 1 then s:= '0' else s:= Copy( VerStr, 1, p - 1 );
|
||||
VerInt[i] := StrToInt(s);
|
||||
i := i + 1;
|
||||
VerStr := Copy( VerStr, p+1, Length(VerStr));
|
||||
end
|
||||
else begin
|
||||
VerInt[i] := StrToInt( VerStr );
|
||||
VerStr := '';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function CompareVersion( ver1, ver2: String; places: Integer ) : Integer;
|
||||
// This function compares version strings to number of places
|
||||
// ie, if we are only interested in comparing major.minor versions
|
||||
// then places = 2
|
||||
// return -1 if ver1 < ver2
|
||||
// return 0 if ver1 = ver2
|
||||
// return 1 if ver1 > ver2
|
||||
//
|
||||
var
|
||||
verint1, verint2: array of Integer;
|
||||
i: integer;
|
||||
begin
|
||||
|
||||
if places > 4 then
|
||||
places :=4;
|
||||
|
||||
SetArrayLength( verint1, 4 );
|
||||
DecodeVersion( ver1, verint1 );
|
||||
|
||||
SetArrayLength( verint2, 4 );
|
||||
DecodeVersion( ver2, verint2 );
|
||||
|
||||
Result := 0; i := 0;
|
||||
while ( (Result = 0) and ( i < places ) ) do begin
|
||||
if verint1[i] > verint2[i] then
|
||||
Result := 1
|
||||
else
|
||||
if verint1[i] < verint2[i] then
|
||||
Result := -1
|
||||
else
|
||||
Result := 0;
|
||||
|
||||
i := i + 1;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
function GetInstalledVersion(BinaryFile: String; var VerInt: Array of Integer): String;
|
||||
var
|
||||
AString: String;
|
||||
begin
|
||||
if (BinaryFile<>'') then begin
|
||||
GetVersionNumbersString( BinaryFile, Astring );
|
||||
DecodeVersion( AString, VerInt );
|
||||
end;
|
||||
result := AString;
|
||||
end;
|
||||
|
||||
|
||||
function ConvertIBVerStrToFbVerStr( VerStr: String) : String;
|
||||
var
|
||||
VerInt: array of Integer;
|
||||
i: Integer;
|
||||
begin
|
||||
DecodeVersion(VerStr, VerInt);
|
||||
VerInt[0]:=1;
|
||||
if VerInt[1]=2 then
|
||||
VerInt[1] := 0
|
||||
else
|
||||
if VerInt[1]=3 then
|
||||
VerInt[1]:=5;
|
||||
|
||||
Result := '';
|
||||
for i:=0 to 3 do begin
|
||||
Result := Result+IntToStr(VerInt[i]);
|
||||
if i<3 then
|
||||
Result:=Result+'.'
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
@ -1,539 +0,0 @@
|
||||
; Initial Developer's Public License.
|
||||
; The contents of this file are subject to the Initial Developer's Public
|
||||
; License Version 1.0 (the "License"). You may not use this file except
|
||||
; in compliance with the License. You may obtain a copy of the License at
|
||||
; http://www.ibphoenix.com/idpl.html
|
||||
; Software distributed under the License is distributed on an "AS IS" basis,
|
||||
; WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
; for the specific language governing rights and limitations under the
|
||||
; License.
|
||||
;
|
||||
; The Original Code is copyright 2001-2003 Paul Reeves for IBPhoenix.
|
||||
;
|
||||
; The Initial Developer of the Original Code is Paul Reeves for IBPhoenix.
|
||||
;
|
||||
; All Rights Reserved.
|
||||
;
|
||||
; Contributor(s):
|
||||
; Tilo Muetze, Theo ? and Michael Rimov for improved detection
|
||||
; of an existing install directory.
|
||||
; Simon Carter for the WinSock2 detection.
|
||||
|
||||
; Usage Notes:
|
||||
;
|
||||
; This script has been designed to work with My InnoSetup Extensions 3.0.6.2
|
||||
; or later. It may work with earlier versions but this is neither guaranteed
|
||||
; nor tested. My InnoSetup Extensions is available from
|
||||
; http://www.wintax.nl/isx/
|
||||
;
|
||||
|
||||
;Either classic_server_install or super_server_install
|
||||
;Default to SuperServer if not defined
|
||||
#define super_server_install
|
||||
#define server_architecture "SuperServer"
|
||||
#define msvc_version 6
|
||||
#define FirebirdURL "http://www.firebirdsql.org"
|
||||
#define BaseVer "1_5"
|
||||
|
||||
[Setup]
|
||||
AppName=Firebird Database Server 1.5 ({#server_architecture})
|
||||
;The following is important - all ISS install packages should
|
||||
;duplicate this for v1.5. See the InnoSetup help for details.
|
||||
AppID=FBDBServer_{#BaseVer}
|
||||
AppVerName=Firebird 1.5.0 {#server_architecture}
|
||||
AppPublisher=Firebird Project
|
||||
AppPublisherURL={#FirebirdURL}
|
||||
AppSupportURL={#FirebirdURL}
|
||||
AppUpdatesURL={#FirebirdURL}
|
||||
DefaultDirName={code:InstallDir|{pf}\Firebird\Firebird_{#BaseVer}}
|
||||
DefaultGroupName=Firebird_{#BaseVer}
|
||||
AllowNoIcons=true
|
||||
SourceDir=..\..\..\..\
|
||||
LicenseFile=builds\install\misc\IPLicense.txt
|
||||
InfoBeforeFile=builds\install\arch-specific\win32\installation_readme.txt
|
||||
InfoAfterFile=builds\install\arch-specific\win32\readme.txt
|
||||
AlwaysShowComponentsList=true
|
||||
WizardImageFile=builds\install\arch-specific\win32\firebird_install_logo1.bmp
|
||||
PrivilegesRequired=admin
|
||||
#ifdef classic_server_install
|
||||
UninstallDisplayIcon={app}\bin\fb_inet_server.exe
|
||||
#else
|
||||
UninstallDisplayIcon={app}\bin\fbserver.exe
|
||||
#endif
|
||||
OutputDir=builds\win32\install_image
|
||||
OutputBaseFilename=Firebird-1.5.0-Win32-{#server_architecture}
|
||||
Compression=bzip
|
||||
|
||||
[Types]
|
||||
Name: ServerInstall; Description: Full installation of server and development tools.
|
||||
Name: DeveloperInstall; Description: Installation of Client tools for Developers and database administrators.
|
||||
Name: ClientInstall; Description: Minimum client install - no server, no tools.
|
||||
|
||||
[Components]
|
||||
Name: ServerComponent; Description: Server component; Types: ServerInstall
|
||||
Name: DevAdminComponent; Description: Tools component; Types: ServerInstall DeveloperInstall
|
||||
Name: ClientComponent; Description: Client component; Types: ServerInstall DeveloperInstall ClientInstall; Flags: fixed disablenouninstallwarning
|
||||
|
||||
[Tasks]
|
||||
;Server tasks
|
||||
Name: UseGuardianTask; Description: "Use the &Guardian to control the server?"; Components: ServerComponent; MinVersion: 4.0,4.0
|
||||
Name: UseApplicationTask; Description: An &Application?; GroupDescription: "Run Firebird server as:"; Components: ServerComponent; MinVersion: 4,4; Flags: exclusive
|
||||
Name: UseServiceTask; Description: A &Service?; GroupDescription: "Run Firebird server as:"; Components: ServerComponent; MinVersion: 0,4; Flags: exclusive
|
||||
Name: AutoStartTask; Description: "Start &Firebird automatically everytime you boot up?"; Components: ServerComponent; MinVersion: 4,4;
|
||||
;Developer Tasks
|
||||
Name: MenuGroupTask; Description: Create a Menu &Group; Components: ServerComponent; MinVersion: 4,4;
|
||||
;One for Ron
|
||||
;Name: MenuGroupTask\desktopicon; Description: Create a &desktop icon; Components: ServerComponent; MinVersion: 4.0,4.0;
|
||||
|
||||
[Run]
|
||||
;Always register Firebird
|
||||
Filename: "{app}\bin\instreg.exe"; Parameters: "install ""{app}"" "; StatusMsg: Updating the registry; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized
|
||||
|
||||
;If on NT/Win2k etc and 'Install and start service' requested
|
||||
Filename: "{app}\bin\instsvc.exe"; Parameters: "install ""{app}"" {code:ServiceStartFlags|""""} "; StatusMsg: "Setting up the service"; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask;
|
||||
Filename: "{app}\bin\instsvc.exe"; Description: "Start Firebird Service now?"; Parameters: start; StatusMsg: Starting the server; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized postinstall; Tasks: UseServiceTask; Check: StartEngine;
|
||||
|
||||
;If 'start as application' requested
|
||||
#ifdef classic_server_install
|
||||
Filename: "{code:StartApp|{app}\bin\fb_inet_server.exe}"; Description: "Start Firebird now?"; Parameters: "-a"; StatusMsg: Starting the server; MinVersion: 0,4.0; Components: ServerComponent; Flags: nowait postinstall; Tasks: UseApplicationTask; Check: StartEngine;
|
||||
#else
|
||||
Filename: "{code:StartApp|{app}\bin\fbserver.exe}"; Description: "Start Firebird now?"; Parameters: "-a"; StatusMsg: Starting the server; MinVersion: 0,4.0; Components: ServerComponent; Flags: nowait postinstall; Tasks: UseApplicationTask; Check: StartEngine;
|
||||
#endif
|
||||
|
||||
[Registry]
|
||||
;If user has chosen to start as App they may well want to start automatically. That is handled by a function below.
|
||||
;Unless we set a marker here the uninstall will leave some annoying debris.
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: Firebird; ValueData: ""; Flags: uninsdeletevalue; Tasks: UseApplicationTask;
|
||||
|
||||
;This doesn't seem to get cleared automatically by instreg on uninstall, so lets make sure of it
|
||||
Root: HKLM; Subkey: SOFTWARE\FirebirdSQL; Flags: uninsdeletekeyifempty; Components: ClientComponent DevAdminComponent ServerComponent;
|
||||
|
||||
[Icons]
|
||||
#ifdef classic_server_install
|
||||
Name: "{group}\Firebird Server"; Filename: {app}\bin\fb_inet_server.exe; Parameters: "-a"; Flags: runminimized; MinVersion: 4.0,4.0; Tasks: MenuGroupTask; Check: InstallServerIcon; IconIndex: 0; Comment: "Run Firebird classic server (without guardian)";
|
||||
#else
|
||||
Name: "{group}\Firebird Server"; Filename: {app}\bin\fbserver.exe; Parameters: "-a"; Flags: runminimized; MinVersion: 4.0,4.0; Tasks: MenuGroupTask; Check: InstallServerIcon; IconIndex: 0; Comment: "Run Firebird Superserver (without guardian)";
|
||||
#endif
|
||||
Name: "{group}\Firebird Guardian"; Filename: {app}\bin\fbguard.exe; Parameters: "-a"; Flags: runminimized; MinVersion: 4.0,4.0; Tasks: MenuGroupTask; Check: InstallGuardianIcon; IconIndex: 1; Comment: "Run Firebird server (with guardian)";
|
||||
Name: "{group}\Firebird 1.5 Release Notes"; Filename: {app}\doc\Firebird_v1_ReleaseNotes.pdf; MinVersion: 4.0,4.0; Tasks: MenuGroupTask; IconIndex: 1; Comment: "Firebird 1.0 release notes. (Requires Acrobat Reader.)";
|
||||
Name: "{group}\Firebird 1.5 Readme"; Filename: {app}\readme.txt; MinVersion: 4.0,4.0; Tasks: MenuGroupTask;
|
||||
Name: "{group}\Uninstall Firebird"; Filename: {uninstallexe}; Comment: "Uninstall Firebird"
|
||||
|
||||
[Files]
|
||||
Source: builds\install\misc\IPLicense.txt; DestDir: {app}; Components: ClientComponent; Flags: sharedfile ignoreversion;
|
||||
Source: builds\install\arch-specific\win32\readme.txt; DestDir: {app}; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\firebird.conf; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall onlyifdoesntexist;
|
||||
Source: output\aliases.conf; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall onlyifdoesntexist;
|
||||
Source: output\security.fdb; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall onlyifdoesntexist;
|
||||
Source: output\security.fbk; DestDir: {app}; Components: ServerComponent; Flags: ignoreversion;
|
||||
Source: output\firebird.log; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall skipifsourcedoesntexist external dontcopy;
|
||||
Source: output\firebird.msg; DestDir: {app}; Components: ClientComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gbak.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gbak.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\bin\gdef.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\bin\gfix.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gfix.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\bin\gpre.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\bin\gsec.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gsec.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gsplit.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\gstat.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\fbguard.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\fb_lock_print.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
#ifdef classic_server_install
|
||||
Source: output\bin\fb_inet_server.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
#else
|
||||
Source: output\bin\fbserver.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
#endif
|
||||
Source: output\bin\ib_util.dll; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\instreg.exe; DestDir: {app}\bin; Components: ClientComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\instsvc.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\bin\isql.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\bin\qli.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\doc\*.*; DestDir: {app}\doc; Components: DevAdminComponent; Flags: skipifsourcedoesntexist ignoreversion;
|
||||
Source: output\doc\sql.extensions\*.*; DestDir: {app}\doc\sql.extensions; Components: DevAdminComponent; Flags: skipifsourcedoesntexist ignoreversion;
|
||||
Source: output\help\*.*; DestDir: {app}\help; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\include\*.*; DestDir: {app}\include; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\intl\fbintl.dll; DestDir: {app}\intl; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\lib\*.*; DestDir: {app}\lib; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\UDF\*.*; DestDir: {app}\UDF; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\examples\*.*; DestDir: {app}\examples; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\api\*.*; DestDir: {app}\examples\api; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\build_win32\*.*; DestDir: {app}\examples\build_win32; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\dyn\*.*; DestDir: {app}\examples\dyn; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\empbuild\*.*; DestDir: {app}\examples\empbuild; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\include\*.*; DestDir: {app}\examples\include; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\stat\*.*; DestDir: {app}\examples\stat; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\udf\*.*; DestDir: {app}\examples\udf; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
;For now (RC2 timeframe) we are not recommending co-existence with other versions of Firebird or InterBase
|
||||
;so we can install the client library and its wrapper into {sys}
|
||||
;Source: output\bin\gds32.dll; DestDir: {app}\bin; Components: ClientComponent; Flags: overwritereadonly sharedfile promptifolder;
|
||||
;Source: output\bin\fbclient.dll; DestDir: {app}\bin; Components: ClientComponent; Flags: overwritereadonly sharedfile promptifolder;
|
||||
Source: output\bin\gds32.dll; DestDir: {sys}\; Components: ClientComponent; Flags: overwritereadonly sharedfile promptifolder;
|
||||
Source: output\bin\fbclient.dll; DestDir: {sys}\; Components: ClientComponent; Flags: overwritereadonly sharedfile promptifolder;
|
||||
Source: builds\install\arch-specific\win32\msvcrt.dll; DestDir: {sys}\; Components: ClientComponent; Flags: uninsneveruninstall sharedfile onlyifdoesntexist;
|
||||
Source: builds\install\arch-specific\win32\msvcp{#msvc_version}0.dll; DestDir: {sys}\; Components: ClientComponent; Flags: uninsneveruninstall sharedfile onlyifdoesntexist;
|
||||
Source: src\extlib\fbudf\fbudf.sql; DestDir: {app}\examples; Components: ServerComponent; Flags: ignoreversion;
|
||||
Source: src\extlib\fbudf\fbudf.txt; DestDir: {app}\doc; Components: ServerComponent; Flags: ignoreversion;
|
||||
Source: lang_helpers\ib_util.pas; DestDir: {app}\include; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
;Source: firebird\install\doc_all_platforms\Firebird_v1_ReleaseNotes.pdf; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
;Source: firebird\install\doc_all_platforms\Firebird_v1_*.html; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
|
||||
[UninstallRun]
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: stop; StatusMsg: "Stopping the service"; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; check: RemoveThisVersion;
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: remove -g; StatusMsg: "Removing the service"; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; check: RemoveThisVersion;
|
||||
Filename: {app}\bin\instreg.exe; Parameters: remove; StatusMsg: "Updating the registry"; MinVersion: 4.0,4.0; Flags: runminimized; check: RemoveThisVersion;
|
||||
|
||||
[UninstallDelete]
|
||||
Type: files; Name: {app}\*.lck
|
||||
Type: files; Name: {app}\*.evn
|
||||
|
||||
[_ISTool]
|
||||
EnableISX=true
|
||||
|
||||
[Code]
|
||||
program Setup;
|
||||
|
||||
const
|
||||
sWinSock2 = 'ws2_32.dll';
|
||||
sNoWinsock2 = 'Please Install Winsock 2 Update before continuing';
|
||||
sMSWinsock2Update = 'http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp';
|
||||
sWinsock2Web = 'Winsock 2 is not installed.'#13#13'Would you like to Visit the Winsock 2 Update Home Page?';
|
||||
ProductVersion = 'PRODUCT_VER_STRING';
|
||||
|
||||
var
|
||||
Winsock2Failure: Boolean;
|
||||
InterBaseVer: Array of Integer;
|
||||
// Likely values for installed versions of InterBase are:
|
||||
// [6,2,0,nnn] Firebird 1.0.0
|
||||
// [6,2,2,nnn] Firebird 1.0.2
|
||||
// [6,0,n,n] InterBase 6.0
|
||||
// [6,5,n,n] InterBase 6.5
|
||||
// [7,0,n,n] InterBase 7.0
|
||||
|
||||
FirebirdVer: Array of Integer;
|
||||
// Likely values for installed versions of Firebird are:
|
||||
// [6,2,0,nnn] Firebird 1.0.0
|
||||
// [6,2,2,nnn] Firebird 1.0.2
|
||||
// [6,2,3,nnn] Firebird 1.0.3
|
||||
// [1,5,0,nnnn] Firebird 1.5.0
|
||||
|
||||
fbclientStartCount,
|
||||
gds32StartCount : Integer;
|
||||
|
||||
procedure GetSharedLibCountAtStart;
|
||||
var
|
||||
dw: Cardinal;
|
||||
begin
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\fbclient.dll', dw) then
|
||||
fbclientStartCount := dw
|
||||
else
|
||||
fbclientStartCount := 0;
|
||||
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\gds32.dll', dw) then
|
||||
gds32StartCount := dw
|
||||
else
|
||||
gds32StartCount := 0;
|
||||
|
||||
end;
|
||||
|
||||
procedure SetSharedLibCountAtEnd;
|
||||
// gds32 and fbclient get registered twice as shared libraries.
|
||||
// This appears to be a bug in InnoSetup. It only appears to affect
|
||||
// libraries the first time they are registered, and it only seems
|
||||
// to affect stuff in the {sys} directory. To work around this we
|
||||
// check the count before install and after install.
|
||||
var
|
||||
dw: cardinal;
|
||||
begin
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\fbclient.dll', dw) then begin
|
||||
|
||||
if (( dw - fbclientStartCount ) > 1 ) then begin
|
||||
dw := fbclientStartCount + 1 ;
|
||||
RegWriteDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\fbclient.dll', dw);
|
||||
end;
|
||||
end;
|
||||
|
||||
if RegQueryDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\gds32.dll', dw) then begin
|
||||
|
||||
if (( dw - gds32StartCount ) > 1 ) then begin
|
||||
dw := gds32StartCount + 1 ;
|
||||
RegWriteDWordValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs','C:\WINNT\System32\gds32.dll', dw);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function CheckWinsock2(): Boolean;
|
||||
begin
|
||||
Result := True;
|
||||
//Check if Winsock 2 is installed (win 95 only)
|
||||
if (not UsingWinNt) and (not FileExists(AddBackslash(GetSystemDir) + sWinSock2)) then begin
|
||||
Winsock2Failure := True;
|
||||
Result := False;
|
||||
end
|
||||
else
|
||||
Winsock2Failure := False;
|
||||
end;
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
|
||||
result := true;
|
||||
|
||||
if not CheckWinsock2 then
|
||||
exit;
|
||||
|
||||
//Look for a running version of Firebird
|
||||
i:=FindWindowByClassName('FB_Disabled');
|
||||
if ( i=0 ) then
|
||||
i:=FindWindowByClassName('FB_Server');
|
||||
|
||||
if ( i<>0 ) then begin
|
||||
result := false;
|
||||
MsgBox('An existing Firebird Server is running. You must close the '+
|
||||
'application or stop the service before continuing.', mbError, MB_OK);
|
||||
end;
|
||||
|
||||
//Check the shared library count.
|
||||
if ( result=true ) then
|
||||
GetSharedLibCountAtStart;
|
||||
|
||||
end;
|
||||
|
||||
procedure DeInitializeSetup();
|
||||
var
|
||||
ErrCode: Integer;
|
||||
begin
|
||||
// Did the install fail because winsock 2 was not installed?
|
||||
if Winsock2Failure then
|
||||
// Ask user if they want to visit the Winsock2 update web page.
|
||||
if MsgBox(sWinsock2Web, mbInformation, MB_YESNO) = idYes then
|
||||
// User wants to visit the web page
|
||||
InstShellExec(sMSWinsock2Update, '', '', SW_SHOWNORMAL, ErrCode);
|
||||
|
||||
end;
|
||||
|
||||
procedure DecodeVersion( verstr: String; var verint: array of Integer );
|
||||
var
|
||||
i,p: Integer; s: string;
|
||||
begin
|
||||
verint := [0,0,0,0];
|
||||
i := 0;
|
||||
while ( (Length(verstr) > 0) and (i < 4) ) do
|
||||
begin
|
||||
p := pos('.', verstr);
|
||||
if p > 0 then
|
||||
begin
|
||||
if p = 1 then s:= '0' else s:= Copy( verstr, 1, p - 1 );
|
||||
verint[i] := StrToInt(s);
|
||||
i := i + 1;
|
||||
verstr := Copy( verstr, p+1, Length(verstr));
|
||||
end
|
||||
else
|
||||
begin
|
||||
verint[i] := StrToInt( verstr );
|
||||
verstr := '';
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetInstalledVersion(ADir: String): Array of Integer;
|
||||
var
|
||||
AString: String;
|
||||
VerInt: Array of Integer;
|
||||
begin
|
||||
if (ADir<>'') then begin
|
||||
GetVersionNumbersString( ADir+'\bin\gbak.exe', Astring);
|
||||
DecodeVersion(AString, VerInt);
|
||||
end;
|
||||
result := VerInt;
|
||||
end;
|
||||
|
||||
function GetFirebirdDir: string;
|
||||
//Check if Firebird installed, get version info to global var and return root dir
|
||||
var
|
||||
FirebirdDir: String;
|
||||
begin
|
||||
FirebirdVer := [0,0,0,0];
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\FirebirdSQL\Firebird\CurrentVersion','RootDirectory', FirebirdDir);
|
||||
if (FirebirdDir<>'') then
|
||||
FirebirdVer:=GetInstalledVersion(FirebirdDir);
|
||||
end;
|
||||
|
||||
function GetInterBaseDir: string;
|
||||
//Check if InterBase installed, get version info to global var and return root dir
|
||||
var
|
||||
InterBaseDir: String;
|
||||
begin
|
||||
InterBaseVer := [0,0,0,0];
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\Borland\InterBase\CurrentVersion','RootDirectory', InterBaseDir);
|
||||
if (InterBaseDir<>'') then
|
||||
InterBaseVer:=GetInstalledVersion(InterBaseDir);
|
||||
end;
|
||||
|
||||
//This function tries to find an existing install of Firebird 1.5
|
||||
//If it succeeds it suggests that directory for the install
|
||||
//Otherwise it suggests the default for Fb 1.5
|
||||
function InstallDir(Default: String): String;
|
||||
var
|
||||
InstallRootDir,
|
||||
InterBaseRootDir,
|
||||
FirebirdRootDir: String;
|
||||
begin
|
||||
InstallRootDir := '';
|
||||
|
||||
// Try to find the value of "RootDirectory" in the Firebird
|
||||
// registry settings. This is either where Fb 1.0 exists or Fb 1.5
|
||||
InterBaseRootDir:=GetInterBaseDir;
|
||||
FirebirdRootDir:=GetFirebirdDir;
|
||||
|
||||
if (FirebirdRootDir <> '') and ( FirebirdRootDir = InterBaseRootDir ) then //Fb 1.0 must be installed so don't overwrite it.
|
||||
InstallRootDir := Default;
|
||||
|
||||
if (( InstallRootDir = '' ) and
|
||||
( FirebirdRootDir = Default )) then // Fb 1.5 is already installed,
|
||||
InstallRootDir := Default; // so we offer to install over it
|
||||
|
||||
if (( InstallRootDir = '') and
|
||||
( FirebirdVer[0] = 1 ) and ( FirebirdVer[1] = 5 ) ) then // Firebird 1.5 is installed
|
||||
InstallRootDir := FirebirdRootDir; // but the user has changed the default
|
||||
|
||||
// if we haven't found anything then try the FIREBIRD env var
|
||||
// User may have preferred location for Firebird, but has possibly
|
||||
// uninstalled previous version
|
||||
if (InstallRootDir = '') then
|
||||
InstallRootDir:=getenv('FIREBIRD');
|
||||
|
||||
//if no existing locations found make sure we default to the default.
|
||||
if (InstallRootDir = '') then
|
||||
InstallRootDir := Default;
|
||||
|
||||
Result := ExpandConstant(InstallRootDir);
|
||||
|
||||
end;
|
||||
|
||||
function UseGuardian(Default: String): String;
|
||||
begin
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
Result := '1'
|
||||
else
|
||||
Result := '0';
|
||||
end;
|
||||
|
||||
function ServiceStartFlags(Default: String): String;
|
||||
var
|
||||
classic: String;
|
||||
begin
|
||||
classic := '';
|
||||
#ifdef classic_server_install
|
||||
classic := ' -classic';
|
||||
#endif
|
||||
Result := '';
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then begin
|
||||
if ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes then
|
||||
Result := ' -auto ' + classic + ' -g '
|
||||
else
|
||||
Result := classic + ' -g ';
|
||||
end
|
||||
else
|
||||
if ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes then
|
||||
Result := ' -auto ';
|
||||
end;
|
||||
|
||||
function InstallGuardianIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function InstallServerIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srNo then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function StartApp(Default: String): String;
|
||||
var
|
||||
AppPath: String;
|
||||
begin
|
||||
AppPath:=ExpandConstant('{app}');
|
||||
//Now start the app as
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
Result := AppPath+'\bin\fbguard.exe'
|
||||
else
|
||||
#ifdef classic_server_install
|
||||
Result := AppPath+'\bin\fb_inet_server.exe';
|
||||
#else
|
||||
Result := AppPath+'\bin\fbserver.exe';
|
||||
#endif
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: Integer);
|
||||
var
|
||||
AppStr: String;
|
||||
begin
|
||||
if ( CurStep=csFinished ) then begin
|
||||
//If user has chosen to install an app and run it automatically set up the registry accordingly
|
||||
//so that the server or guardian starts evertime they login.
|
||||
if (ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes) and
|
||||
( ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes ) then begin
|
||||
AppStr := StartApp('')+' -a';
|
||||
|
||||
RegWriteStringValue (HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Firebird', AppStr);
|
||||
|
||||
end;
|
||||
end;
|
||||
|
||||
if ( CurStep=csFinished ) then
|
||||
//Check that the shared lib count is correct.
|
||||
SetSharedLibCountAtEnd;
|
||||
|
||||
end;
|
||||
|
||||
function FirebirdOneRunning: boolean;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
result := false;
|
||||
|
||||
//Look for a running copy of InterBase or Firebird 1.0.
|
||||
i:=0;
|
||||
i:=FindWindowByClassName('IB_Server') ;
|
||||
if ( i<>0 ) then
|
||||
result := true;
|
||||
|
||||
end;
|
||||
|
||||
function StartEngine: boolean;
|
||||
begin
|
||||
result := not FirebirdOneRunning;
|
||||
end;
|
||||
|
||||
function RemoveThisVersion: boolean;
|
||||
//check if we are still the current version before removing
|
||||
var
|
||||
VersionStr: string;
|
||||
begin
|
||||
result := false;
|
||||
if RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
'SOFTWARE\FirebirdSQL\Firebird\CurrentVersion','Version', VersionStr ) then
|
||||
if (pos(ProductVersion,VersionStr)>0) then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
820
builds/install/arch-specific/win32/FirebirdInstall_20.iss
Normal file
820
builds/install/arch-specific/win32/FirebirdInstall_20.iss
Normal file
@ -0,0 +1,820 @@
|
||||
; Initial Developer's Public License.
|
||||
; The contents of this file are subject to the Initial Developer's Public
|
||||
; License Version 1.0 (the "License"). You may not use this file except
|
||||
; in compliance with the License. You may obtain a copy of the License at
|
||||
; http://www.ibphoenix.com?a=ibphoenix&page=ibp_idpl
|
||||
; Software distributed under the License is distributed on an "AS IS" basis,
|
||||
; WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
; for the specific language governing rights and limitations under the
|
||||
; License.
|
||||
;
|
||||
; The Original Code is copyright 2001-2003 Paul Reeves for IBPhoenix.
|
||||
;
|
||||
; The Initial Developer of the Original Code is Paul Reeves for IBPhoenix.
|
||||
;
|
||||
; All Rights Reserved.
|
||||
;
|
||||
; Contributor(s):
|
||||
; Tilo Muetze, Theo ? and Michael Rimov for improved detection
|
||||
; of an existing install directory.
|
||||
; Simon Carter for the WinSock2 detection.
|
||||
; Philippe Makowski for internationalization and french translation
|
||||
|
||||
; Usage Notes:
|
||||
;
|
||||
; This script has been designed to work with Inno Setup v4.2.7
|
||||
; with Inno Setup Preprocessor v. 1.2.1.295. It is available
|
||||
; as a quick start pack from here:
|
||||
; http://www.jrsoftware.org/isdl.php#qsp
|
||||
;
|
||||
;
|
||||
; Known bugs and problems etc etc.
|
||||
;
|
||||
; o The uninstaller can only uninstall what it installed.
|
||||
; For instance, if Firebird is installed as a service, but is actually
|
||||
; running as an application when the uninstaller is run then the
|
||||
; application will not be stopped and the uninstall will not complete
|
||||
; cleanly.
|
||||
;
|
||||
; InnoSetup does not support script execution as part of uninstallation.
|
||||
; And this feature is not likely to be added in the near future. Here is
|
||||
; the definitive explanation from Jordan Russell, the developer of InnoSetup:
|
||||
;
|
||||
; 'The uninstaller currently relies on a 100% forward compatible uninstall
|
||||
; log format. When an existing uninstall log is appended to, and the
|
||||
; uninstaller EXE is replaced with a newer version, the previous log contents
|
||||
; are guaranteed to be processed properly. There are no such guarantees of
|
||||
; forward compatibility with the Pascal Scripting feature; some support
|
||||
; functions might be removed at some point, their declarations might change,
|
||||
; etc. For the uninstaller to support Pascal Scripting, it would likely have
|
||||
; to abandon the uninstall-log-appending concept, and instead create multiple
|
||||
; uninstaller EXEs (chained together somehow) and multiple uninstall logs.'
|
||||
;
|
||||
; To work around this we will probably need to extend the instsvc/instreg
|
||||
; utilities to support uninstallation of applications.
|
||||
;
|
||||
;
|
||||
; o The uninstaller does not know how to stop multiple instances of a classic
|
||||
; server. They must be stopped manually.
|
||||
;
|
||||
;
|
||||
;
|
||||
|
||||
;-------Innosetup script debug flags
|
||||
;A dynamically generated sed script sets the appropriate define
|
||||
;See BuildExecutableInstall.bat for more details.
|
||||
|
||||
;This define is not used in practice, but is retained for documentation
|
||||
;purposes. If set to iss_release it implies that the defines for files,
|
||||
;examples and compression are set.
|
||||
#define iss_release
|
||||
|
||||
#define files
|
||||
#define examples
|
||||
#define compression
|
||||
|
||||
;-------end of Innosetup script debug flags section
|
||||
|
||||
|
||||
;-------Start of Innosetup script
|
||||
#define msvc_version 6
|
||||
#define FirebirdURL "http://www.firebirdsql.org"
|
||||
#define BaseVer "2_0"
|
||||
#define release
|
||||
#define no_pdb
|
||||
#define i18n
|
||||
|
||||
;------Undefine specifically for this Alpha build
|
||||
#undef i18n
|
||||
|
||||
;Some strings to distinguish the name of final executable
|
||||
#ifdef ship_pdb
|
||||
#define pdb_str="_pdb"
|
||||
#else
|
||||
#define pdb_str=""
|
||||
#endif
|
||||
#ifdef debug
|
||||
#define debug_str="_debug"
|
||||
#else
|
||||
#define debug_str=""
|
||||
#endif
|
||||
|
||||
#define package_number="0"
|
||||
|
||||
|
||||
[Setup]
|
||||
AppName={cm:MyAppName}
|
||||
;The following is important - all ISS install packages should
|
||||
;duplicate this. See the InnoSetup help for details.
|
||||
AppID=FBDBServer_{#BaseVer}
|
||||
AppVerName=Firebird 2.0.0
|
||||
AppPublisher=Firebird Project
|
||||
AppPublisherURL={#FirebirdURL}
|
||||
AppSupportURL={#FirebirdURL}
|
||||
AppUpdatesURL={#FirebirdURL}
|
||||
DefaultDirName={code:ChooseInstallDir|{pf}\Firebird\Firebird_{#BaseVer}}
|
||||
DefaultGroupName=Firebird_{#BaseVer}
|
||||
AllowNoIcons=true
|
||||
SourceDir=..\..\..\..\
|
||||
LicenseFile=builds\install\misc\IPLicense.txt
|
||||
AlwaysShowComponentsList=true
|
||||
WizardImageFile=builds\install\arch-specific\win32\firebird_install_logo1.bmp
|
||||
PrivilegesRequired=admin
|
||||
UninstallDisplayIcon={code:ChooseUninstallIcon|{app}\bin\fbserver.exe}
|
||||
OutputDir=builds\install_images
|
||||
OutputBaseFilename=Firebird-2.0.0-{#package_number}-Win32{#debug_str}{#pdb_str}
|
||||
#ifdef compression
|
||||
Compression=lzma
|
||||
SolidCompression=true
|
||||
#else
|
||||
Compression=none
|
||||
SolidCompression=false
|
||||
#endif
|
||||
|
||||
ShowTasksTreeLines=false
|
||||
LanguageDetectionMethod=uilanguage
|
||||
|
||||
[Languages]
|
||||
Name: en; MessagesFile: compiler:Default.isl; InfoBeforeFile: builds\install\arch-specific\win32\installation_readme.txt; InfoAfterFile: builds\install\arch-specific\win32\readme.txt;
|
||||
#ifdef i18n
|
||||
Name: fr; MessagesFile: compiler:Languages\French.isl; InfoBeforeFile: builds\install\arch-specific\win32\fr\installation_lisezmoi.txt; InfoAfterFile: builds\install\arch-specific\win32\fr\lisezmoi.txt;
|
||||
Name: de; MessagesFile: compiler:Languages\German.isl; InfoBeforeFile: builds\install\arch-specific\win32\de\installation_liesmich.txt; InfoAfterFile: builds\install\arch-specific\win32\de\liesmich.txt
|
||||
Name: hu; MessagesFile: compiler:Languages\Hungarian.isl; InfoBeforeFile: builds\install\arch-specific\win32\installation_readme.txt; InfoAfterFile: builds\install\arch-specific\win32\readme.txt;
|
||||
Name: pt; MessagesFile: compiler:Languages\PortugueseStd.isl; InfoBeforeFile: builds\install\arch-specific\win32\pt\instalação_leia-me.txt; InfoAfterFile: builds\install\arch-specific\win32\pt\leia-me.txt
|
||||
Name: si; MessagesFile: compiler:Languages\Slovenian.isl; InfoBeforeFile: builds\install\arch-specific\win32\si\instalacija_precitajMe.txt; InfoAfterFile: builds\install\arch-specific\win32\readme.txt;
|
||||
#endif
|
||||
|
||||
[Messages]
|
||||
en.BeveledLabel=English
|
||||
#ifdef i18n
|
||||
fr.BeveledLabel=Français
|
||||
de.BeveledLabel=Deutsch
|
||||
hu.BeveledLabel=Magyar
|
||||
pt.BeveledLabel=Português
|
||||
si.BeveledLabel=Slovenski
|
||||
#endif
|
||||
|
||||
[CustomMessages]
|
||||
#include "custom_messages.inc"
|
||||
#ifdef i18n
|
||||
#include "fr\custom_messages_fr.inc"
|
||||
#include "de\custom_messages_de.inc"
|
||||
#include "hu\custom_messages_hu.inc"
|
||||
#include "pt\custom_messages_pt.inc"
|
||||
#include "si\custom_messages_si.inc"
|
||||
#endif
|
||||
|
||||
#ifdef iss_debug
|
||||
; By default, the languages available at runtime depend on the user's
|
||||
; code page. A user with the Western European code page set will not
|
||||
; even see that we support installation with the Slovenian language
|
||||
; for example.
|
||||
; It can be useful when debugging to force the display of all available
|
||||
; languages by setting LanguageCodePage to 0. Of course, if the langauge
|
||||
; is not supported by the user's current code page it be unusable.
|
||||
[LangOptions]
|
||||
LanguageCodePage=0
|
||||
#endif
|
||||
|
||||
[Types]
|
||||
Name: SuperServerInstall; Description: {cm:SuperServerInstall}
|
||||
Name: ClassicServerInstall; Description: {cm:ClassicServerInstall}
|
||||
Name: DeveloperInstall; Description: {cm:DeveloperInstall}
|
||||
Name: ClientInstall; Description: {cm:ClientInstall}
|
||||
Name: CustomInstall; Description: {cm:CustomInstall}; Flags: iscustom;
|
||||
|
||||
[Components]
|
||||
Name: SuperServerComponent; Description: {cm:SuperServerComponent}; Types: SuperServerInstall; Flags: exclusive;
|
||||
Name: ClassicServerComponent; Description: {cm:ClassicServerComponent}; Types: ClassicServerInstall; Flags: exclusive;
|
||||
Name: ServerComponent; Description: {cm:ServerComponent}; Types: SuperServerInstall ClassicServerInstall;
|
||||
Name: DevAdminComponent; Description: {cm:DevAdminComponent}; Types: SuperServerInstall ClassicServerInstall DeveloperInstall;
|
||||
Name: ClientComponent; Description: {cm:ClientComponent}; Types: SuperServerInstall ClassicServerInstall DeveloperInstall ClientInstall CustomInstall; Flags: fixed disablenouninstallwarning;
|
||||
|
||||
[Tasks]
|
||||
;Server tasks
|
||||
Name: UseGuardianTask; Description: {cm:UseGuardianTask}; Components: ServerComponent; MinVersion: 4.0,4.0; Check: ConfigureFirebird;
|
||||
Name: UseApplicationTask; Description: {cm:UseApplicationTaskMsg}; GroupDescription: {cm:TaskGroupDescription}; Components: ServerComponent; MinVersion: 4,4; Flags: exclusive; Check: ConfigureFirebird;
|
||||
Name: UseServiceTask; Description: {cm:UseServiceTask}; GroupDescription: {cm:TaskGroupDescription}; Components: ServerComponent; MinVersion: 0,4; Flags: exclusive; Check: ConfigureFirebird;
|
||||
Name: AutoStartTask; Description: {cm:AutoStartTask}; Components: ServerComponent; MinVersion: 4,4; Check: ConfigureFirebird;
|
||||
;Name: MenuGroupTask; Description: Create a Menu &Group; Components: DevAdminComponent; MinVersion: 4,4
|
||||
;Copying of client libs to <sys>
|
||||
Name: CopyFbClientToSysTask; Description: {cm:CopyFbClientToSysTask}; Components: ClientComponent; MinVersion: 4,4; Flags: Unchecked; Check: ShowCopyFbClientLibTask;
|
||||
Name: CopyFbClientAsGds32Task; Description: {cm:CopyFbClientAsGds32Task}; Components: ClientComponent; MinVersion: 4,4; Check: ShowCopyGds32Task;
|
||||
;Allow user to not install cpl applet
|
||||
Name: InstallCPLAppletTask; Description: {cm:InstallCPLAppletTask}; Components: SuperServerComponent; MinVersion: 4.0,4.0; Check: ShowInstallCPLAppletTask;
|
||||
|
||||
|
||||
[Run]
|
||||
;Always register Firebird
|
||||
Filename: {app}\bin\instreg.exe; Parameters: "install "; StatusMsg: {cm:instreg}; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized
|
||||
|
||||
Filename: {app}\bin\instclient.exe; Parameters: "install fbclient"; StatusMsg: {cm:instclientCopyFbClient}; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized; Check: CopyFBClientLib;
|
||||
Filename: {app}\bin\instclient.exe; Parameters: "install gds32"; StatusMsg: {cm:instclientGenGds32}; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized; Check: CopyGds32
|
||||
|
||||
|
||||
;If on NT/Win2k etc and 'Install and start service' requested
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: "install {code:ServiceStartFlags|""""} "; StatusMsg: {cm:instsvcSetup}; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; Check: ConfigureFirebird;
|
||||
Filename: {app}\bin\instsvc.exe; Description: {cm:instsvcStartQuestion}; Parameters: start; StatusMsg: {cm:instsvcStartMsg}; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized postinstall; Tasks: UseServiceTask; Check: StartEngine
|
||||
|
||||
;If 'start as application' requested
|
||||
Filename: {code:StartApp|{app}\bin\fbserver.exe}; Description: {cm:instappStartQuestion}; Parameters: -a; StatusMsg: {cm:instappStartMsg}; MinVersion: 0,4.0; Components: ServerComponent; Flags: nowait postinstall; Tasks: UseApplicationTask; Check: StartEngine
|
||||
|
||||
|
||||
[Registry]
|
||||
;If user has chosen to start as App they may well want to start automatically. That is handled by a function below.
|
||||
;Unless we set a marker here the uninstall will leave some annoying debris.
|
||||
Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: Firebird; ValueData: ; Flags: uninsdeletevalue; Tasks: UseApplicationTask; Check: ConfigureFirebird;
|
||||
|
||||
;This doesn't seem to get cleared automatically by instreg on uninstall, so lets make sure of it
|
||||
Root: HKLM; Subkey: "SOFTWARE\Firebird Project"; Flags: uninsdeletekeyifempty; Components: ClientComponent DevAdminComponent ServerComponent
|
||||
|
||||
;Clean up Invalid registry entries from previous installs.
|
||||
Root: HKLM; Subkey: "SOFTWARE\FirebirdSQL"; ValueType: none; Flags: deletekey;
|
||||
|
||||
;User _may_ be installing over an existing 1.5 install, and it may have been set to run as application on startup
|
||||
;so we had better delete this entry unless they have chosen to autostart as application
|
||||
; - except that this seems to be broken. Bah!
|
||||
;Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; Valuetype: none; ValueName: 'Firebird'; ValueData: ''; flags: deletevalue; Check: IsNotAutoStartApp;
|
||||
[Icons]
|
||||
Name: {group}\Firebird Server; Filename: {app}\bin\fb_inet_server.exe; Parameters: -a; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallServerIcon; IconIndex: 0; Components: ClassicServerComponent; Comment: Run Firebird classic server (without guardian)
|
||||
Name: {group}\Firebird Server; Filename: {app}\bin\fbserver.exe; Parameters: -a; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallServerIcon; IconIndex: 0; Components: SuperServerComponent; Comment: Run Firebird Superserver (without guardian)
|
||||
Name: {group}\Firebird Guardian; Filename: {app}\bin\fbguard.exe; Parameters: -a; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallGuardianIcon; IconIndex: 1; Components: SuperServerComponent; Comment: Run Firebird Super Server (with guardian)
|
||||
Name: {group}\Firebird Guardian; Filename: {app}\bin\fbguard.exe; Parameters: -c; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallGuardianIcon; IconIndex: 1; Components: ClassicServerComponent; Comment: Run Firebird Classic Server (with guardian)
|
||||
#define App_Name = SetupSetting("AppName")
|
||||
Name: {group}\Firebird 2.0.0 Release Notes; Filename: {app}\doc\Firebird_v2.0.0.ReleaseNotes.pdf; MinVersion: 4.0,4.0; Comment: {#App_Name} {cm:ReleaseNotes}
|
||||
Name: {group}\Firebird 1.5.2 Release Notes; Filename: {app}\doc\Firebird_v1.5.2.ReleaseNotes.pdf; MinVersion: 4.0,4.0; Comment: {#App_Name} {cm:ReleaseNotes}
|
||||
Name: {group}\Firebird 1.5.1 Release Notes; Filename: {app}\doc\Firebird_v1.5.1.ReleaseNotes.pdf; MinVersion: 4.0,4.0; Comment: {#App_Name} {cm:ReleaseNotes}
|
||||
Name: {group}\Firebird 1.5 Release Notes; Filename: {app}\doc\Firebird_v1.5.ReleaseNotes.pdf; MinVersion: 4.0,4.0; Comment: {#App_Name} {cm:ReleaseNotes}
|
||||
;Always install the original english version
|
||||
Name: {group}\Firebird 2.0.0 Readme; Filename: {app}\readme.txt; MinVersion: 4.0,4.0;
|
||||
#ifdef i18n
|
||||
;And install translated readme.txt if non-default language is chosen.
|
||||
Name: {group}\{cm:IconReadme}; Filename: {app}\{cm:ReadMeFile}; MinVersion: 4.0,4.0; Components: DevAdminComponent; Check: NonDefaultLanguage;
|
||||
#endif
|
||||
Name: {group}\Uninstall Firebird; Filename: {uninstallexe}; Comment: Uninstall Firebird
|
||||
|
||||
[Files]
|
||||
#ifdef files
|
||||
Source: builds\install\misc\IPLicense.txt; DestDir: {app}; Components: ClientComponent; Flags: sharedfile ignoreversion;
|
||||
Source: builds\install\misc\IDPLicense.txt; DestDir: {app}; Components: ClientComponent; Flags: sharedfile ignoreversion
|
||||
;Always install the original english version
|
||||
Source: builds\install\arch-specific\win32\readme.txt; DestDir: {app}; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
#ifdef i18n
|
||||
;Translated files
|
||||
Source: src\install\arch-specific\win32\fr\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: fr;
|
||||
Source: src\install\arch-specific\win32\de\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: de;
|
||||
Source: src\install\arch-specific\win32\hu\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: hu;
|
||||
Source: src\install\arch-specific\win32\pt\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: pt;
|
||||
Source: src\install\arch-specific\win32\si\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: si;
|
||||
#endif
|
||||
Source: output\firebird.conf; DestDir: {app}; DestName: firebird.conf; Components: ServerComponent; Flags: uninsneveruninstall; check: SaveFirebirdConf
|
||||
Source: output\aliases.conf; DestDir: {app}; Components: ClientComponent; Flags: uninsneveruninstall onlyifdoesntexist
|
||||
Source: output\security.fdb; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall onlyifdoesntexist
|
||||
Source: output\security.fbk; DestDir: {app}; Components: ServerComponent; Flags: ignoreversion
|
||||
Source: output\firebird.msg; DestDir: {app}; Components: ClientComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\firebird.log; DestDir: {app}; Components: ServerComponent; Flags: uninsneveruninstall skipifsourcedoesntexist external dontcopy
|
||||
|
||||
Source: output\bin\gbak.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\gdef.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion
|
||||
Source: output\bin\gfix.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\gpre.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion
|
||||
Source: output\bin\gsec.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\gsplit.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\gstat.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\fbguard.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\fb_lock_print.exe; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\fb_inet_server.exe; DestDir: {app}\bin; Components: ClassicServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\fbserver.exe; DestDir: {app}\bin; Components: SuperServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\ib_util.dll; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\instclient.exe; DestDir: {app}\bin; Components: ClientComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\instreg.exe; DestDir: {app}\bin; Components: ClientComponent; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\instsvc.exe; DestDir: {app}\bin; Components: ServerComponent; MinVersion: 0,4.0; Flags: sharedfile ignoreversion
|
||||
Source: output\bin\isql.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion
|
||||
Source: output\bin\qli.exe; DestDir: {app}\bin; Components: DevAdminComponent; Flags: ignoreversion
|
||||
Source: output\bin\fbclient.dll; DestDir: {app}\bin; Components: ClientComponent; Flags: overwritereadonly sharedfile promptifolder
|
||||
Source: output\bin\security_database.sql; DestDir: {app}\bin; Components: ServerComponent; Flags: sharedfile ignoreversion
|
||||
|
||||
; Install MS libs locally if Win2K or later, else place in <sys> if NT4 or Win95/98/ME.
|
||||
; NOTE: These dll's MUST never be sourced from the local system32 directory.
|
||||
; Deploy libraries from vcredist if MSVC6 is used. Use %FrameworkSDKDir% is compiling with Visual Studio.
|
||||
; The BuildExecutableInstall.bat will attempt to locate them and place them in output\system32\
|
||||
#if msvc_version == 6
|
||||
Source: output\system32\msvcrt.dll; DestDir: {app}\bin; Components: ClientComponent; MinVersion: 0,5.0;
|
||||
Source: output\system32\msvcrt.dll; DestDir: {sys}; Components: ClientComponent; OnlyBelowVersion: 5.0,5.0; Flags: sharedfile onlyifdoesntexist uninsneveruninstall;
|
||||
#elif msvc_version == 7
|
||||
Source: output\system32\msvcr{#msvc_version}?.dll; DestDir: {app}\bin; Components: ClientComponent; MinVersion: 0,5.0;
|
||||
Source: output\system32\msvcr{#msvc_version}?.dll; DestDir: {sys}; Components: ClientComponent; OnlyBelowVersion: 5.0,5.0; Flags: sharedfile uninsneveruninstall;
|
||||
#endif
|
||||
Source: output\system32\msvcp{#msvc_version}?.dll; DestDir: {app}\bin; Components: ClientComponent; MinVersion: 0,5.0;
|
||||
Source: output\system32\msvcp{#msvc_version}?.dll; DestDir: {sys}; Components: ClientComponent; OnlyBelowVersion: 5.0,5.0; Flags: sharedfile uninsneveruninstall;
|
||||
|
||||
;Docs
|
||||
Source: output\doc\*.*; DestDir: {app}\doc; Components: DevAdminComponent; Flags: skipifsourcedoesntexist ignoreversion
|
||||
Source: output\doc\sql.extensions\*.*; DestDir: {app}\doc\sql.extensions; Components: DevAdminComponent; Flags: skipifsourcedoesntexist ignoreversion
|
||||
|
||||
Source: output\help\*.*; DestDir: {app}\help; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\include\*.*; DestDir: {app}\include; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\intl\fbintl.dll; DestDir: {app}\intl; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\lib\*.*; DestDir: {app}\lib; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\UDF\ib_udf.dll; DestDir: {app}\UDF; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\UDF\fbudf.dll; DestDir: {app}\UDF; Components: ServerComponent; Flags: sharedfile ignoreversion;
|
||||
Source: output\UDF\*.sql; DestDir: {app}\UDF; Components: ServerComponent; Flags: ignoreversion;
|
||||
|
||||
;Note - Win9x requires 8.3 filenames for the uninsrestartdelete option to work
|
||||
;FIXME Source: output\system32\Firebird2Control.cpl; DestDir: {sys}; Components: SuperServerComponent; MinVersion: 0,4.0; Flags: sharedfile ignoreversion promptifolder restartreplace uninsrestartdelete; Check: InstallCPLApplet
|
||||
;FIXME Source: output\system32\Firebird2Control.cpl; DestDir: {sys}\FIREBI~1.CPL; Components: SuperServerComponent; MinVersion: 4.0,0; Flags: sharedfile ignoreversion promptifolder restartreplace uninsrestartdelete; Check: InstallCPLApplet
|
||||
#endif
|
||||
#ifdef examples
|
||||
Source: output\examples\*.*; DestDir: {app}\examples; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\api\*.*; DestDir: {app}\examples\api; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\build_win32\*.*; DestDir: {app}\examples\build_win32; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\dyn\*.*; DestDir: {app}\examples\dyn; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\empbuild\*.*; DestDir: {app}\examples\empbuild; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\include\*.*; DestDir: {app}\examples\include; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\stat\*.*; DestDir: {app}\examples\stat; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
Source: output\examples\udf\*.*; DestDir: {app}\examples\udf; Components: DevAdminComponent; Flags: ignoreversion;
|
||||
#endif
|
||||
|
||||
#ifdef ship_pdb
|
||||
Source: output\bin\fbclient.pdb; DestDir: {app}\bin; Components: ClientComponent;
|
||||
Source: output\bin\fb_inet_server.pdb; DestDir: {app}\bin; Components: ClassicServerComponent;
|
||||
Source: output\bin\fbserver.pdb; DestDir: {app}\bin; Components: SuperServerComponent;
|
||||
#endif
|
||||
|
||||
[UninstallRun]
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: " stop"; StatusMsg: {cm:instsvcStopMsg}; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; RunOnceId: StopService
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: " remove"; StatusMsg: {cm:instsvcRemove}; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; RunOnceId: RemoveService
|
||||
Filename: {app}\bin\instclient.exe; Parameters: " remove gds32"; StatusMsg: {cm:instclientDecLibCountGds32}; MinVersion: 4.0,4.0; Flags: runminimized;
|
||||
Filename: {app}\bin\instclient.exe; Parameters: " remove fbclient"; StatusMsg: {cm:instclientDecLibCountFbClient}; MinVersion: 4.0,4.0; Flags: runminimized;
|
||||
Filename: {app}\bin\instreg.exe; Parameters: " remove"; StatusMsg: {cm:instreg}; MinVersion: 4.0,4.0; Flags: runminimized; RunOnceId: RemoveRegistryEntry
|
||||
|
||||
[UninstallDelete]
|
||||
Type: files; Name: {app}\*.lck
|
||||
Type: files; Name: {app}\*.evn
|
||||
|
||||
|
||||
[_ISTool]
|
||||
EnableISX=true
|
||||
|
||||
[Code]
|
||||
program Setup;
|
||||
|
||||
//Var
|
||||
// ProductVersion = '1.5.0';
|
||||
|
||||
// Some global variables are also in FirebirdInstallEnvironmentChecks.inc
|
||||
// This is not ideal, but then this scripting environment is not ideal, either.
|
||||
// The basic point of the include files is to isolate chunks of code that are
|
||||
// a) Form a module or have common functionality
|
||||
// b) Debugged.
|
||||
// This hopefully keeps the main script simpler to follow.
|
||||
|
||||
Var
|
||||
InstallRootDir: String;
|
||||
FirebirdConfSaved: String;
|
||||
ForceInstall: Boolean; // If /force set on command-line we install _and_
|
||||
// configure. Default is to install and configure only if
|
||||
// no other working installation is found (unless we are installing
|
||||
// over the same version)
|
||||
|
||||
//These three command-line options change the default behaviour
|
||||
// during a scripted install
|
||||
// They also control whether their associated task checkboxes are displayed
|
||||
// during an interactive install
|
||||
NoCPL: Boolean; // pass /nocpl on command-line.
|
||||
NoLegacyClient: Boolean; // pass /nogds32 on command line.
|
||||
CopyFbClient: Boolean; // pass /copyfbclient on command line.
|
||||
|
||||
|
||||
#include "FirebirdInstallSupportFunctions.inc"
|
||||
#include "FirebirdInstallEnvironmentChecks.inc"
|
||||
|
||||
|
||||
function SummarizeInstalledProducts: String;
|
||||
var
|
||||
InstallSummaryArray: TArrayofString;
|
||||
product: Integer;
|
||||
i: Integer;
|
||||
StatusDescription: String;
|
||||
InstallSummary: String;
|
||||
prodstr: String;
|
||||
begin
|
||||
|
||||
//do nothing gracefully if we are called by accident.
|
||||
if ProductsInstalledCount = 0 then
|
||||
exit;
|
||||
|
||||
SetArrayLength(InstallSummaryArray,ProductsInstalledCount);
|
||||
for product := 0 to MaxProdInstalled -1 do begin
|
||||
if (ProductsInstalledArray[product].InstallType <> NotInstalled) then begin
|
||||
InstallSummaryArray[i] := Format1(ProductsInstalledArray[product].Description,
|
||||
ProductsInstalledArray[product].ActualVersion);
|
||||
|
||||
if (ProductsInstalledArray[product].ServerVersion <> '') then begin
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClassicServerInstall) = ClassicServerInstall) then
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i] + ' '+ExpandConstant('{cm:ClassicServerInstall}')
|
||||
else
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i] + ' '+ExpandConstant('{cm:SuperServerInstall}')
|
||||
end
|
||||
else begin
|
||||
if (ProductsInstalledArray[product].GBAKVersion <> '') then
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i] + ' '+ExpandConstant('{cm:DeveloperInstall}')
|
||||
else
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i] + ' '+ExpandConstant('{cm:ClientInstall}')
|
||||
end;
|
||||
|
||||
if ((ProductsInstalledArray[product].InstallType AND BrokenInstall) = BrokenInstall) then
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i]
|
||||
+ #13 + ExpandConstant('{cm:PreviousInstallBroken}')
|
||||
else
|
||||
InstallSummaryArray[i] := InstallSummaryArray[i]
|
||||
+ #13 + ExpandConstant('{cm:PreviousInstallGood}')
|
||||
;
|
||||
|
||||
i:= i+1;
|
||||
end;
|
||||
end;
|
||||
|
||||
for i:=0 to ProductsInstalledCount-1 do
|
||||
InstallSummary := InstallSummary + InstallSummaryArray[i] + #13;
|
||||
|
||||
//If FB2 is installed
|
||||
If ((ProductsInstalled AND FB2) = FB2) then
|
||||
InstallSummary := InstallSummary
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix1}')
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix2}')
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix3}')
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix4}')
|
||||
+#13
|
||||
;
|
||||
|
||||
if ProductsInstalledCount = 1 then
|
||||
StatusDescription := Format2(ExpandConstant('{cm:InstallProducts}'), IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountSingular}'))
|
||||
else
|
||||
StatusDescription := Format2(ExpandConstant('{cm:InstallProducts}'), IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountPlural}'));
|
||||
|
||||
Result := StatusDescription
|
||||
+#13
|
||||
+#13 + InstallSummary
|
||||
+#13 + ExpandConstant('{cm:InstallSummaryCancel1}')
|
||||
+#13 + ExpandConstant('{cm:InstallSummaryCancel2}')
|
||||
+#13
|
||||
+#13 + ExpandConstant('{cm:InstallSummaryCancel3}')
|
||||
+#13
|
||||
end;
|
||||
|
||||
function AnalysisAssessment: boolean;
|
||||
var
|
||||
MsgText: String;
|
||||
MsgResult: Integer;
|
||||
begin
|
||||
result := false;
|
||||
|
||||
//We've got all this information. What do we do with it?
|
||||
|
||||
if ProductsInstalledCount = 0 then
|
||||
//There is a possibility that all our efforts to detect an
|
||||
//install were in vain and Firebird 1.5 _is_ running...
|
||||
if ( FirebirdOneFiveRunning ) then begin
|
||||
result := false;
|
||||
MsgBox( #13+ExpandConstant('{cm:Fb15Running1}')
|
||||
+#13
|
||||
+#13+ExpandConstant('{cm:Fb15Running2}')
|
||||
+#13+ExpandConstant('{cm:Fb15Running3}')
|
||||
+#13, mbError, MB_OK);
|
||||
exit;
|
||||
end
|
||||
else begin
|
||||
result := true;
|
||||
exit;
|
||||
end;
|
||||
|
||||
//If Fb15 RC is installed then we can install over it.
|
||||
//unless we find the server running.
|
||||
if (ProductsInstalledCount = 1) AND
|
||||
(((ProductsInstalled AND FB15) = FB15) OR
|
||||
((ProductsInstalled AND FB15RC) = FB15RC)) then
|
||||
if ( FirebirdOneFiveRunning ) then begin
|
||||
result := false;
|
||||
MsgBox( #13+ExpandConstant('{cm:Fb15Running1}')
|
||||
+#13
|
||||
+#13+ExpandConstant('{cm:Fb15Running2}')
|
||||
+#13+ExpandConstant('{cm:Fb15Running3}')
|
||||
+#13, mbError, MB_OK);
|
||||
exit;
|
||||
end
|
||||
else begin
|
||||
result := true;
|
||||
exit;
|
||||
end
|
||||
;
|
||||
|
||||
if ForceInstall then begin
|
||||
result := true;
|
||||
exit;
|
||||
end;
|
||||
|
||||
//Otherwise, show user the analysis report.
|
||||
MsgText := SummarizeInstalledProducts;
|
||||
MsgResult := MsgBox(MsgText,mbConfirmation,MB_YESNO);
|
||||
if (MsgResult = IDNO ) then
|
||||
result := true;
|
||||
//but we don't configure
|
||||
if ((InstallAndConfigure AND Configure) = Configure) then
|
||||
InstallAndConfigure := InstallAndConfigure - Configure;
|
||||
end;
|
||||
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
var
|
||||
i: Integer;
|
||||
CommandLine: String;
|
||||
begin
|
||||
|
||||
result := true;
|
||||
|
||||
if not CheckWinsock2 then begin
|
||||
result := False;
|
||||
exit;
|
||||
end
|
||||
|
||||
CommandLine:=GetCmdTail;
|
||||
if pos('FORCE',Uppercase(CommandLine))>0 then
|
||||
ForceInstall:=True;
|
||||
|
||||
if pos('NOCPL', Uppercase(CommandLine))>0 then
|
||||
NoCPL := True;
|
||||
|
||||
if pos('NOGDS32', Uppercase(CommandLine))>0 then
|
||||
NoLegacyClient := True;
|
||||
|
||||
if pos('COPYFBCLIENT', Uppercase(CommandLine))>0 then
|
||||
CopyFbClient := True;
|
||||
|
||||
//By default we want to install and confugure,
|
||||
//unless subsequent analysis suggests otherwise.
|
||||
InstallAndConfigure := Install + Configure;
|
||||
|
||||
InitExistingInstallRecords;
|
||||
AnalyzeEnvironment;
|
||||
result := AnalysisAssessment;
|
||||
|
||||
InstallRootDir := '';
|
||||
|
||||
end;
|
||||
|
||||
|
||||
procedure DeInitializeSetup();
|
||||
var
|
||||
ErrCode: Integer;
|
||||
begin
|
||||
// Did the install fail because winsock 2 was not installed?
|
||||
if Winsock2Failure then
|
||||
// Ask user if they want to visit the Winsock2 update web page.
|
||||
if MsgBox(ExpandConstant('{cm:Winsock2Web1}')+#13#13+ExpandConstant('{cm:Winsock2Web2}'), mbInformation, MB_YESNO) = idYes then
|
||||
// User wants to visit the web page
|
||||
InstShellExec(sMSWinsock2Update, '', '', SW_SHOWNORMAL, ErrCode);
|
||||
end;
|
||||
|
||||
|
||||
//This function tries to find an existing install of Firebird 1.5
|
||||
//If it succeeds it suggests that directory for the install
|
||||
//Otherwise it suggests the default for Fb 1.5
|
||||
function ChooseInstallDir(Default: String): String;
|
||||
var
|
||||
InterBaseRootDir,
|
||||
FirebirdRootDir: String;
|
||||
begin
|
||||
//The installer likes to call this FOUR times, which makes debugging a pain,
|
||||
//so let's test for a previous call.
|
||||
if (InstallRootDir = '') then begin
|
||||
|
||||
// Try to find the value of "RootDirectory" in the Firebird
|
||||
// registry settings. This is either where Fb 1.0 exists or Fb 1.5
|
||||
InterBaseRootDir := GetInterBaseDir;
|
||||
FirebirdRootDir := GetFirebirdDir;
|
||||
|
||||
if (FirebirdRootDir <> '') and ( FirebirdRootDir = InterBaseRootDir ) then //Fb 1.0 must be installed so don't overwrite it.
|
||||
InstallRootDir := Default;
|
||||
|
||||
if (( InstallRootDir = '' ) and
|
||||
( FirebirdRootDir = Default )) then // Fb 1.5 is already installed,
|
||||
InstallRootDir := Default; // so we offer to install over it
|
||||
|
||||
if (( InstallRootDir = '') and
|
||||
( FirebirdVer[0] = 1 ) and ( FirebirdVer[1] = 5 ) ) then // Firebird 1.5 is installed
|
||||
InstallRootDir := FirebirdRootDir; // but the user has changed the default
|
||||
|
||||
// if we haven't found anything then try the FIREBIRD env var
|
||||
// User may have preferred location for Firebird, but has possibly
|
||||
// uninstalled previous version
|
||||
if (InstallRootDir = '') then
|
||||
InstallRootDir:=getenv('FIREBIRD');
|
||||
|
||||
//if no existing locations found make sure we default to the default.
|
||||
if (InstallRootDir = '') then
|
||||
InstallRootDir := Default;
|
||||
|
||||
end; // if InstallRootDir = '' then begin
|
||||
|
||||
Result := ExpandConstant(InstallRootDir);
|
||||
|
||||
end;
|
||||
|
||||
|
||||
function ServiceStartFlags(Default: String): String;
|
||||
var
|
||||
ServerType: String;
|
||||
SvcParams: String;
|
||||
begin
|
||||
servertype := '';
|
||||
SvcParams := '';
|
||||
if ClassicInstallChosen then
|
||||
ServerType := ' -classic '
|
||||
else
|
||||
ServerType := ' -superserver ';
|
||||
|
||||
|
||||
if ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes then
|
||||
SvcParams := ' -auto '
|
||||
else
|
||||
SvcParams := ' -demand ';
|
||||
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
SvcParams := SvcParams + ServerType + ' -guardian'
|
||||
else
|
||||
SvcParams := SvcParams + ServerType;
|
||||
|
||||
Result := SvcParams;
|
||||
end;
|
||||
|
||||
function InstallGuardianIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function InstallServerIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srNo then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function StartApp(Default: String): String;
|
||||
begin
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then begin
|
||||
Result := GetAppPath+'\bin\fbguard.exe';
|
||||
if ClassicInstallChosen then
|
||||
Result := Result + ' -c';
|
||||
end
|
||||
else
|
||||
if ClassicInstallChosen then
|
||||
Result := GetAppPath+'\bin\fb_inet_server.exe'
|
||||
else
|
||||
Result := GetAppPath+'\bin\fbserver.exe';
|
||||
|
||||
|
||||
end;
|
||||
|
||||
function IsNotAutoStartApp: boolean;
|
||||
//Support function to help remove unwanted registry entry.
|
||||
begin
|
||||
result := true;
|
||||
if ( ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes) and
|
||||
( ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes ) then
|
||||
result := false;
|
||||
end;
|
||||
|
||||
|
||||
procedure RemoveSavedConfIfNoDiff;
|
||||
//Compare firebird.conf with the one we just saved.
|
||||
//If they match then we can remove the saved one.
|
||||
var
|
||||
FirebirdConfStr: String;
|
||||
SavedConfStr: String;
|
||||
begin
|
||||
LoadStringFromFile( GetAppPath+'\firebird.conf', FirebirdConfStr );
|
||||
LoadStringFromFile( FirebirdConfSaved, SavedConfStr );
|
||||
|
||||
if CompareStr( FirebirdConfStr, SavedConfStr ) = 0 then
|
||||
DeleteFile( FirebirdConfSaved );
|
||||
end;
|
||||
|
||||
procedure UpdateFirebirdConf;
|
||||
// Update firebird conf. If user has deselected the guardian we should update
|
||||
// firebird.conf accordingly. Otherwise we leave the file unchanged.
|
||||
var
|
||||
fbconf: TArrayOfString;
|
||||
i, position: Integer;
|
||||
ArraySize: Integer;
|
||||
FileChanged: boolean;
|
||||
begin
|
||||
//There is no simple, foolproof and futureproof way to check whether
|
||||
//we are doing a server install, so the easiest way is to see if a
|
||||
//firebird.conf exists. If it doesn't then we don't care.
|
||||
if FileExists(GetAppPath+'\firebird.conf') then begin
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask') = srNo then
|
||||
ReplaceLine(GetAppPath+'\firebird.conf','GuardianOption','GuardianOption = 0','#');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure CurPageChanged(CurPage: Integer);
|
||||
begin
|
||||
case CurPage of
|
||||
wpInfoBefore: WizardForm.INFOBEFOREMEMO.font.name:='Courier New';
|
||||
wpInfoBefore: WizardForm.INFOAFTERMEMO.font.name:='Courier New';
|
||||
wpSelectTasks: WizardForm.TASKSLIST.height := WizardForm.TASKSLIST.height+30;
|
||||
wpFinished: ; // Create some links to Firebird and IBP here?.
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure CurStepChanged(CurStep: Integer);
|
||||
var
|
||||
AppStr: String;
|
||||
begin
|
||||
case CurStep of
|
||||
csCopy: begin
|
||||
SetupSharedFilesArray;
|
||||
GetSharedLibCountBeforeCopy;
|
||||
end;
|
||||
|
||||
csFinished: begin
|
||||
//If user has chosen to install an app and run it automatically set up the registry accordingly
|
||||
//so that the server or guardian starts evertime they login.
|
||||
if (ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes) and
|
||||
( ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes ) then begin
|
||||
AppStr := StartApp('')+' -a';
|
||||
RegWriteStringValue (HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Firebird', AppStr);
|
||||
end;
|
||||
|
||||
RemoveSavedConfIfNoDiff;
|
||||
UpdateFirebirdConf;
|
||||
CheckSharedLibCountAtEnd;
|
||||
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function StartEngine: boolean;
|
||||
begin
|
||||
if ConfigureFirebird then
|
||||
result := not FirebirdOneRunning;
|
||||
end;
|
||||
|
||||
|
||||
function ChooseUninstallIcon(Default: String): String;
|
||||
begin
|
||||
if ClassicInstallChosen then
|
||||
result := GetAppPath+'\bin\fb_inet_server.exe'
|
||||
else
|
||||
result := GetAppPath+'\bin\fbserver.exe';
|
||||
|
||||
end;
|
||||
|
||||
function SaveFirebirdConf: boolean;
|
||||
// If we are installing over an existing installation we save the original
|
||||
// config file. This is so that we don't have to worry about a conflict between
|
||||
// the users configuration and the configuration expected by the installer. We
|
||||
// always use the standard configuration and let the user sort out any problems
|
||||
// later. We could do things the other way round, but then we would have to read
|
||||
// the existing config file and dynamically set install options (like use of
|
||||
// guardian). This will quickly start to get way too complicated.
|
||||
var
|
||||
NewFileName: String;
|
||||
i: Integer;
|
||||
begin
|
||||
//for some reason the 3.0.6 installer wants to call this twice
|
||||
//so we need to check.
|
||||
if FirebirdConfSaved = '' then begin
|
||||
if fileexists(GetAppPath+'\firebird.conf') then begin
|
||||
i:=0;
|
||||
// 999 previous installs ought to be enough :-)
|
||||
while i < 999 do begin
|
||||
NewFileName := GetAppPath+'\firebird.conf.saved.'+IntToStr(i);
|
||||
if fileexists(NewFileName) then
|
||||
i := i + 1
|
||||
else
|
||||
break;
|
||||
end;
|
||||
|
||||
filecopy( GetAppPath+'\firebird.conf', NewFileName, false );
|
||||
FirebirdConfSaved := NewFileName;
|
||||
end
|
||||
end
|
||||
|
||||
//Always return true
|
||||
result := true;
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
end.
|
||||
|
||||
|
||||
|
69
builds/install/arch-specific/win32/custom_messages.inc
Normal file
69
builds/install/arch-specific/win32/custom_messages.inc
Normal file
@ -0,0 +1,69 @@
|
||||
en.MyAppName=Firebird Database Server 2.0
|
||||
en.SuperServerInstall=Full installation of Super Server and development tools.
|
||||
en.ClassicServerInstall=Full installation of Classic Server and development tools.
|
||||
en.DeveloperInstall=Installation of Client tools for Developers and database administrators.
|
||||
en.ClientInstall=Minimum client install - no server, no tools.
|
||||
en.CustomInstall=Custom installation
|
||||
en.SuperServerComponent=Super Server binary
|
||||
en.ClassicServerComponent=Classic Server binary
|
||||
en.ServerComponent=Server components
|
||||
en.DevAdminComponent=Developer and admin tools components
|
||||
en.ClientComponent=Client components
|
||||
en.UseGuardianTask=Use the &Guardian to control the server?
|
||||
en.UseApplicationTaskMsg=Run as an &Application?
|
||||
en.TaskGroupDescription=Run Firebird server as:
|
||||
en.UseServiceTask=Run as a &Service?
|
||||
en.AutoStartTask=Start &Firebird automatically everytime you boot up?
|
||||
en.CopyFbClientToSysTask=Copy &Firebird client library to <system> directory?
|
||||
en.CopyFbClientAsGds32Task=Generate client library as GDS32.DLL for &legacy app. support?
|
||||
en.InstallCPLAppletTask="Install Control &Panel Applet?"
|
||||
en.instreg=Updating the registry
|
||||
en.instclientCopyFbClient=Copying fbclient to the <sys> directory
|
||||
en.instclientGenGds32=Generating gds32.dll for <sys> directory
|
||||
en.instclientDecLibCountGds32="Decrementing shared lib count for gds32 and removing it if appropriate."
|
||||
en.instclientDecLibCountFbClient="Decrementing shared lib count for fbclient and removing it if appropriate."
|
||||
en.instsvcSetup=Setting up the service
|
||||
en.instsvcStartQuestion=Start Firebird Service now?
|
||||
en.instsvcStartMsg=Starting the server
|
||||
en.instsvcStopMsg="Stopping the service"
|
||||
en.instsvcRemove="Removing the service"
|
||||
en.instappStartQuestion=Start Firebird now?
|
||||
en.instappStartMsg=Starting the server
|
||||
|
||||
en.InstallSummarySuffix1=This version of Firebird will become the default install.
|
||||
en.InstallSummarySuffix2=Also, take note that installing this version of Firebird
|
||||
en.InstallSummarySuffix3= when a later version is already installed may lead to
|
||||
en.InstallSummarySuffix4= unpredictable results.
|
||||
|
||||
en.InstallSummaryCancel1= If you continue with this installation Firebird will be installed but not configured.
|
||||
en.InstallSummaryCancel2= You will have to complete installation manually.
|
||||
en.InstallSummaryCancel3= Do you want to CANCEL this installation?
|
||||
|
||||
en.InstalledProducts='re-installation analysis indicates that %s existing Firebird or Interbase %s been found.
|
||||
en.InstalledProdCountSingular=version has
|
||||
en.InstalledProdCountPlural=versions have
|
||||
|
||||
en.Fb15Running1=An existing Firebird 1.5 or 2.0 Server is running.
|
||||
en.Fb15Running2= You must close the application or stop the
|
||||
en.Fb15Running3= service before continuing.
|
||||
|
||||
en.PreviousInstallBroken= (Install appears broken due to version string mismatch.)
|
||||
en.PreviousInstallGood= (Installation appears to be correct.)
|
||||
|
||||
en.IconReadme=Firebird 2.0 Readme
|
||||
en.IconUninstall=Uninstall Firebird
|
||||
en.ReleaseNotes= release notes. (Requires Acrobat Reader.)
|
||||
en.Uninstall=Uninstall Firebird
|
||||
en.Winsock2Web1=Winsock 2 is not installed.
|
||||
en.Winsock2Web2=Would you like to Visit the Winsock 2 Update Home Page?
|
||||
en.NoWinsock2 = Please Install Winsock 2 Update before continuing
|
||||
en.MSWinsock2Update = http://www.microsoft.com/windows95/downloads/contents/WUAdminTools/S_WUNetworkingTools/W95Sockets2/Default.asp
|
||||
|
||||
en.RunCSNoGuardian=Run Firebird classic server (without guardian)
|
||||
en.RunSSNoGuardian=Run Firebird Superserver (without guardian)
|
||||
en.RunSSWithGuardian=Run Firebird Super Server (with guardian)
|
||||
en.RunCSWithGuardian=Run Firebird Classic Server (with guardian)
|
||||
en.RunISQL=Run command-line based Interactive SQL tool
|
||||
|
||||
en.ReadmeFile=readme.txt
|
||||
en.InstallationReadmeFile=installation_readme.txt
|
138
builds/install/arch-specific/win32/i18n_readme.txt
Normal file
138
builds/install/arch-specific/win32/i18n_readme.txt
Normal file
@ -0,0 +1,138 @@
|
||||
Internationalization (I18N) of the Win32 installer.
|
||||
===================================================
|
||||
|
||||
The intention of adding internationalization to the Win32 Firebird
|
||||
installer is to provide a minimum level of translation to support
|
||||
the installation process only. This means just translating the install
|
||||
dialogues, the readme file and the installation readme file. All other
|
||||
documentatation i18n should be available separately. I18n is a
|
||||
good thing, but bloating the installer with large amounts of translated
|
||||
documentation is not desirable.
|
||||
|
||||
The current version of InnoSetup - 4.2.7 - provides generic support for
|
||||
the following languages:
|
||||
|
||||
Catalan, Czech, Dutch, French, German, Norwegian, Polish,
|
||||
PortugueseStd, Russian and Slovenian.
|
||||
|
||||
In addition, the InnoSetup user community has made other language packs
|
||||
available for download. See here for details:
|
||||
|
||||
http://www.jrsoftware.org/files/istrans/
|
||||
|
||||
Therefore adding i18n support to the Firebird installer is extremely
|
||||
simple as all we need are translations of the Firebird specific messages.
|
||||
|
||||
Currently the Firebird installer has support for English, French, German
|
||||
Portuguese (standard), Hungarian and Slovenian installs. So there are still
|
||||
opportunities for others to provide support for their native language.
|
||||
|
||||
|
||||
How to add new languages
|
||||
------------------------
|
||||
|
||||
The simplest way to understand this is to study the implementation of
|
||||
the French translation. The steps to follow are these:
|
||||
|
||||
o The Win32 install files are located in install\arch-specific\win32.
|
||||
This sub-directory is located as follows:
|
||||
|
||||
Firebird 1.5 - firebird2\src
|
||||
Firebird 2.0 - firebird2\builds
|
||||
|
||||
o You can use anonymous CVS to checkout the Win32 install kit with these
|
||||
commands:
|
||||
|
||||
[login]
|
||||
|
||||
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/firebird login
|
||||
|
||||
[checkout the Fb 1.5 Win32 installation kit]
|
||||
|
||||
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/firebird co -r B1_5_Release firebird2/src/install/arch-specific/win32
|
||||
|
||||
[checkout the Fb 2.0 Win32 installation kit (When it is ready)]
|
||||
|
||||
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/firebird co firebird2/builds/install/arch-specific/win32
|
||||
|
||||
|
||||
o Each language has its own sub-directory under install\arch-specific\win32.
|
||||
If possible a two-letter language code should be used for the
|
||||
directory name. This two letter code should, if possible, be the
|
||||
internationally recognised two-letter identifier for the langauge.
|
||||
|
||||
|
||||
o Three files are required:
|
||||
|
||||
* custom_messages_%LANG_CODE%.inc
|
||||
|
||||
where %LANG_CODE% represents the language identifier used in the
|
||||
directory name. This file contains the translated strings that are
|
||||
used throughout the installation process. The original, english
|
||||
strings are stored in install\arch-specific\win32\custom_messages.inc
|
||||
|
||||
* readme.txt
|
||||
|
||||
where the actual file name can be either in english or in the
|
||||
translated equivalent of the name. The readme file stores last
|
||||
minute documentation changes as well as general notes on using
|
||||
firebird. It is displayed at the end of the installation process.
|
||||
|
||||
The readme file is always subject to change from one beta or
|
||||
pre-release to the next (or final release.) For this reason the
|
||||
translated readme should always explain that the english language
|
||||
readme.txt is the definitive version. This is because it will
|
||||
not be possible to hold up a release while waiting for translators
|
||||
to complete their work.
|
||||
|
||||
* installation_readme.txt
|
||||
|
||||
This filename can be translated or left with the original english
|
||||
title. It contains installation specific details. It is displayed
|
||||
near the beginning of the installation process. The installation
|
||||
readme is usually static and only changes from point release to
|
||||
point release.
|
||||
|
||||
|
||||
o Issues to bear in mind
|
||||
|
||||
* Use ascii characters for filenames where possible.
|
||||
|
||||
* All strings that appear as text labels in dialogue screens should contain
|
||||
an ampersand ( & ) to support keyboard input during setup.
|
||||
|
||||
* The installation readme file and the readme file must be formatted to
|
||||
a column width of 55 chars. Otherwise the installer will wrap lines
|
||||
awkwardly. This is because the installer screens use the Courier New
|
||||
font to display these text files. Courier New guarantees to maintain
|
||||
column alignment.
|
||||
|
||||
|
||||
o Adding the new language to the InnoSetup install script
|
||||
|
||||
Changes have been kept to the absolute minimum. Only the following
|
||||
sections need to be altered:
|
||||
|
||||
[Languages]
|
||||
Name: en; MessagesFile: compiler:Default.isl; InfoBeforeFile: output\doc\installation_readme.txt; InfoAfterFile: src\install\arch-specific\win32\readme.txt;
|
||||
Name: fr; MessagesFile: compiler:Languages\French.isl; InfoBeforeFile: src\install\arch-specific\win32\fr\installation_lisezmoi.txt; InfoAfterFile: src\install\arch-specific\win32\fr\lisezmoi.txt;
|
||||
|
||||
[Messages]
|
||||
en.BeveledLabel=English
|
||||
fr.BeveledLabel=Français
|
||||
|
||||
[CustomMessages]
|
||||
#include "custom_messages.inc"
|
||||
#include "fr\custom_messages_fr.inc"
|
||||
|
||||
You are not required to make these changes.
|
||||
|
||||
|
||||
o Submitting your changes
|
||||
|
||||
All i18n is being co-ordinated by Paul Reeves who maintains the Win32
|
||||
installation kits. He can be contacted at:
|
||||
|
||||
mailto: preeves at ibphoenix.com
|
||||
|
||||
|
163
builds/install/arch-specific/win32/installation_scripted.txt
Normal file
163
builds/install/arch-specific/win32/installation_scripted.txt
Normal file
@ -0,0 +1,163 @@
|
||||
|
||||
Setup Command Line Parameters
|
||||
=============================
|
||||
|
||||
General parameters available to all InnoSetup based installers
|
||||
--------------------------------------------------------------
|
||||
|
||||
The Setup program accepts optional command line parameters. These can
|
||||
be useful to system administrators, and to other programs calling the
|
||||
Setup program.
|
||||
|
||||
These notes are applicable to version 4.2.7 of InnoSetup.
|
||||
/SP-
|
||||
Disables the 'This will install... Do you wish to continue?' prompt at
|
||||
the beginning of Setup. Of course, this will have no effect if the
|
||||
DisableStartupPrompt [Setup] section directive was set to yes.
|
||||
|
||||
|
||||
/SILENT, /VERYSILENT
|
||||
Instructs Setup to be silent or very silent. When Setup is silent the
|
||||
wizard and the background window are not displayed but the installation
|
||||
progress window is. When a setup is very silent this installation
|
||||
progress window is not displayed. Everything else is normal so for
|
||||
example error messages during installation are displayed and the startup
|
||||
prompt is (if you haven't disabled it with DisableStartupPrompt or the '/SP-' command line option
|
||||
explained above)
|
||||
|
||||
If a restart is necessary and the '/NORESTART' command isn't used
|
||||
(see below) and Setup is silent, it will display a Reboot now?
|
||||
message box. If it's very silent it will reboot without asking.
|
||||
|
||||
|
||||
/LOG
|
||||
Causes Setup to create a log file in the user's TEMP directory
|
||||
detailing file installation actions taken during the installation
|
||||
process. This can be a helpful debugging aid. For example, if you
|
||||
suspect a file isn't being replaced when you believe it should be (or
|
||||
vice versa), the log file will tell you if the file was really
|
||||
skipped, and why.
|
||||
|
||||
The log file is created with a unique name based on the current date.
|
||||
(It will not overwrite or append to existing files.) Currently, it is
|
||||
not possible to customize the filename.
|
||||
|
||||
The information contained in the log file is technical in nature and
|
||||
therefore not intended to be understandable by end users. Nor is it
|
||||
designed to be machine-parseable; the format of the file is subject
|
||||
to change without notice.
|
||||
|
||||
|
||||
/NOCANCEL
|
||||
Prevents the user from cancelling during the installation process,
|
||||
by disabling the Cancel button and ignoring clicks on the close
|
||||
button. Useful along with '/SILENT' or '/VERYSILENT'.
|
||||
|
||||
|
||||
/NORESTART
|
||||
Instructs Setup not to reboot even if it's necessary.
|
||||
|
||||
|
||||
/RESTARTEXITCODE=exit code
|
||||
Specifies the custom exit code that Setup is to return when a restart
|
||||
is needed. Useful along with '/NORESTART'. Also see Setup Exit Codes.
|
||||
|
||||
|
||||
/LOADINF="filename"
|
||||
Instructs Setup to load the settings from the specified file after
|
||||
having checked the command line. This file can be prepared using the
|
||||
'/SAVEINF=' command as explained below.
|
||||
|
||||
o Don't forget to use quotes if the filename contains spaces.
|
||||
|
||||
|
||||
/SAVEINF="filename"
|
||||
Instructs Setup to save installation settings to the specified file.
|
||||
|
||||
o Don't forget to use quotes if the filename contains spaces.
|
||||
|
||||
|
||||
/LANG=language
|
||||
Specifies the language to use. language specifies the internal name
|
||||
of the language as specified in a [Languages] section entry.
|
||||
|
||||
o When a valid /LANG parameter is used, the Select Language dialog will be suppressed.
|
||||
|
||||
|
||||
/DIR="x:\dirname"
|
||||
Overrides the default directory name displayed on the Select Destination
|
||||
Location wizard page. A fully qualified pathname must be specified.
|
||||
|
||||
|
||||
/GROUP="folder name"
|
||||
Overrides the default folder name displayed on the Select Start Menu Folder
|
||||
wizard page. If the [Setup] section directive DisableProgramGroupPage
|
||||
was set to yes, this command line parameter is ignored.
|
||||
|
||||
|
||||
/NOICONS
|
||||
Instructs Setup to initially check the Don't create any icons check box
|
||||
on the Select Start Menu Folder wizard page.
|
||||
|
||||
|
||||
Parameters specific to Firebird installs
|
||||
----------------------------------------
|
||||
|
||||
/COMPONENTS="comma separated list of component names"
|
||||
|
||||
Choose from - SuperServerComponent,
|
||||
ClassicServerComponent,
|
||||
ServerComponent,
|
||||
DevAdminComponent and
|
||||
ClientComponent
|
||||
|
||||
Overrides the default components settings. Using this command line
|
||||
parameter causes Setup to automatically select a custom type. A full
|
||||
install requires combining components. For example:
|
||||
|
||||
/COMPONENTS="SuperServerComponent, ServerComponent,
|
||||
DevAdminComponent, ClientComponent"
|
||||
|
||||
would be required for a full install.
|
||||
|
||||
|
||||
/FORCE
|
||||
|
||||
Tells the installer to ignore its analysis of the existing
|
||||
environment. It will attempt to install and configure Firebird 1.5 as
|
||||
if no previous version of Firebird or InterBase was installed.
|
||||
|
||||
This can be useful if you have a seriously broken installation that
|
||||
you cannot uninstall. Or it could be another way to aggravate your
|
||||
users by breaking a perfectly good working install of InterBase. Its
|
||||
your choice.
|
||||
|
||||
|
||||
/NOCPL
|
||||
|
||||
Don't install the Control Panel Applet. This is useful for two
|
||||
reasons:
|
||||
|
||||
o Installing/Uninstalling the CPL applet requires a system
|
||||
restart on Windows 2000 (and perhaps some other platforms.)
|
||||
|
||||
o You may wish to use an alternative cpl applet.
|
||||
|
||||
|
||||
/NOGDS32
|
||||
|
||||
Don't install a copy of the client library into the system directory,
|
||||
even if installation analysis concludes it is OK to do so.
|
||||
|
||||
|
||||
/COPYFBCLIENT
|
||||
|
||||
Copy the fbclient.dll to the system directory. This is recommended
|
||||
for client installs if you are sure that you will only ever be
|
||||
accessing a single server version. If your client applications are
|
||||
likely to take advantage of accessing different server versions this
|
||||
is not recommended. See
|
||||
doc/README.Win32LibraryInstallation.txt
|
||||
for more information.
|
||||
|
||||
|
@ -1,35 +0,0 @@
|
||||
:: This bat set the environment values
|
||||
:: ROOT_PATH dos format path of the main directory
|
||||
:: DB_PATH unix format path of the main directory
|
||||
:: VS_VER VisualStudio version (msvc6|msvc7)
|
||||
|
||||
@echo off
|
||||
::=================
|
||||
:SET_DB_DIR
|
||||
|
||||
@cd ..\..\..\..
|
||||
@for /f "delims=" %%a in ('@cd') do (set ROOT_PATH=%%a)
|
||||
@cd %~dp0
|
||||
for /f "tokens=*" %%a in ('@echo %ROOT_PATH:\=/%') do (set DB_PATH=%%a)
|
||||
|
||||
@msdev /? >nul 2>nul
|
||||
@if not errorlevel 9009 ((set MSVC_VERSION=6) & (goto :END))
|
||||
|
||||
@devenv /? >nul 2>nul
|
||||
@if not errorlevel 9009 ((set MSVC_VERSION=7) & (goto :END))
|
||||
|
||||
::===========
|
||||
:HELP
|
||||
@echo.
|
||||
@echo ERROR: There are not a visual studio valid version in your path.
|
||||
@echo You need visual studio 6 or 7 to build Firebird
|
||||
@echo.
|
||||
:: set errorlevel
|
||||
@exit /B 1
|
||||
|
||||
:END
|
||||
@echo.
|
||||
@echo msvc_version=%MSVC_VERSION%
|
||||
@echo db_path=%DB_PATH%
|
||||
@echo root_path=%ROOT_PATH%
|
||||
@echo.
|
Loading…
Reference in New Issue
Block a user