mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-23 06:43:04 +01:00
Backport improved product detection code from 2.1
Upgrade install script to InnoSetup 5.2.3 to take a) advantage of improved vista support b) make ongoing maintenance eaisier.
This commit is contained in:
parent
acb03b69bc
commit
f3dda2c9ac
@ -118,10 +118,10 @@ if %FBBUILD_ZIP_PACK% EQU 1 (
|
||||
|
||||
|
||||
if %FBBUILD_ISX_PACK% EQU 1 (
|
||||
if NOT DEFINED INNO_SETUP_PATH (
|
||||
call :ERROR INNO_SETUP_PATH variable not defined
|
||||
if NOT DEFINED INNO5_SETUP_PATH (
|
||||
call :ERROR INNO5_SETUP_PATH variable not defined
|
||||
@goto :EOF
|
||||
) else (@echo o Inno Setup found at %INNO_SETUP_PATH%.)
|
||||
) else (@echo o Inno Setup 5 found at %INNO5_SETUP_PATH%.)
|
||||
|
||||
if not DEFINED FB_EXTERNAL_DOCS (
|
||||
@echo.
|
||||
@ -203,16 +203,18 @@ set FBBUILD_FB15_CUR_VER=1.5.5
|
||||
:: MSVC7 requires the Framework SDK v1.1 to be installed.
|
||||
::=====================
|
||||
@if not exist %FB_OUTPUT_DIR%\system32 (mkdir %FB_OUTPUT_DIR%\system32)
|
||||
@if DEFINED MSDevDir (
|
||||
@if %MSVC_VERSION% EQU 6 (
|
||||
@copy "%MSDevDir%\vcredist\msvcrt.dll" %FB_OUTPUT_DIR%\bin\ > nul
|
||||
@copy "%MSDevDir%\vcredist\msvcp%MSVC_VERSION%0.dll" %FB_OUTPUT_DIR%\bin\ > nul
|
||||
)
|
||||
) else (
|
||||
@if %MSVC_VERSION% EQU 7 (
|
||||
@copy "%FrameworkSDKDir%\bin\msvcp%MSVC_VERSION%?.dll" %FB_OUTPUT_DIR%\bin\ > nul
|
||||
@copy "%FrameworkSDKDir%\bin\msvcr%MSVC_VERSION%?.dll" %FB_OUTPUT_DIR%\bin\ > nul
|
||||
)
|
||||
)
|
||||
|
||||
)
|
||||
@if %ERRORLEVEL% GEQ 1 ( (call :ERROR Copying MSVC runtime library failed with error %ERRORLEVEL% ) & (goto :EOF))
|
||||
::grab some missing bits'n'pieces from different parts of the source tree
|
||||
::=========================================================================
|
||||
@ -616,14 +618,14 @@ endlocal
|
||||
::=======
|
||||
:: Now let's go and build the installable .exe
|
||||
::
|
||||
:: Note - define INNO_SETUP_PATH with double quotes if it is installed into a path string using spaces.
|
||||
:: eg set INNO_SETUP_PATH="C:\Program Files\Inno Setup 4"
|
||||
:: Note - define INNO5_SETUP_PATH with double quotes if it is installed into a path string using spaces.
|
||||
:: eg set INNO5_SETUP_PATH="C:\Program Files\Inno Setup 5"
|
||||
::
|
||||
::=================================================
|
||||
if %FBBUILD_ISX_PACK% NEQ 1 goto :EOF
|
||||
@Echo Now let's compile the InnoSetup scripts
|
||||
@Echo.
|
||||
"%INNO_SETUP_PATH%"\iscc %FB_ROOT_PATH%\builds\install\arch-specific\win32\FirebirdInstall_%FBBUILD_FILE_ID%.iss
|
||||
%INNO5_SETUP_PATH%\iscc %FB_ROOT_PATH%\builds\install\arch-specific\win32\FirebirdInstall_%FBBUILD_FILE_ID%.iss
|
||||
@echo.
|
||||
|
||||
@echo End of ISX_PACK
|
||||
@ -647,7 +649,7 @@ if %FBBUILD_ISX_PACK% NEQ 1 goto :EOF
|
||||
@echo (These files roughly double the size of the package.)
|
||||
@echo.
|
||||
@echo ISX Create installable binary from InnoSetup Extensions compiler.
|
||||
@echo (You need to set the INNO_SETUP_PATH environment variable.)
|
||||
@echo (You need to set the INNO5_SETUP_PATH environment variable.)
|
||||
@echo.
|
||||
@echo ZIP Create Zip package.
|
||||
@echo (SEVENZIP is currently used and the SEVENZIP env var must be set.)
|
||||
|
@ -42,7 +42,8 @@
|
||||
function CopyFbClientLib: boolean;
|
||||
function ShowCopyFbClientLibTask: boolean;
|
||||
|
||||
|
||||
function HasWI30: boolean;
|
||||
function HasNotWI30: boolean;
|
||||
*)
|
||||
|
||||
|
||||
@ -83,27 +84,44 @@ Const
|
||||
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;
|
||||
IB4Install = 0;
|
||||
IB5Install = 1;
|
||||
IB6Install = 2;
|
||||
IB65Install = 3;
|
||||
IB70Install = 4;
|
||||
FB1Install = 5;
|
||||
FB15RCInstall = 6;
|
||||
FB15Install = 7;
|
||||
FB20Install = 8;
|
||||
IB80Install = 9;
|
||||
IB81Install = 10;
|
||||
FB21Install = 11;
|
||||
FB21_x64_Install = 12;
|
||||
FB25Install = 13;
|
||||
FB25_x64_Install = 14;
|
||||
FB30Install = 15;
|
||||
FB30_x64_Install = 16;
|
||||
|
||||
//ProductsInstalled
|
||||
IB4 = $0001;
|
||||
IB5 = $0002;
|
||||
IB6 = $0004;
|
||||
IB65 = $0008;
|
||||
IB7 = $0010;
|
||||
FB1 = $0020;
|
||||
FB15RC = $0040;
|
||||
FB15 = $0080;
|
||||
FB2 = $0100;
|
||||
MaxProdInstalled = FB30_x64_Install;
|
||||
|
||||
//ProductsInstalled
|
||||
IB4 = $00001;
|
||||
IB5 = $00002;
|
||||
IB6 = $00004;
|
||||
IB65 = $00008;
|
||||
IB70 = $00010;
|
||||
FB1 = $00020;
|
||||
FB15RC = $00040;
|
||||
FB15 = $00080;
|
||||
FB20 = $00100;
|
||||
IB80 = $00200;
|
||||
IB81 = $00400;
|
||||
FB21 = $00800;
|
||||
FB25 = $01000;
|
||||
FB30 = $02000;
|
||||
FB21_x64 = $04000;
|
||||
FB25_x64 = $08000;
|
||||
FB30_x64 = $10000;
|
||||
|
||||
// Likely gds32 version strings for installed versions of Firebird or InterBase are:
|
||||
// [6,0,n,n] InterBase 6.0
|
||||
@ -140,6 +158,7 @@ Type
|
||||
InstallType: Integer;
|
||||
ActualVersion: String;
|
||||
FirebirdVersion:String;
|
||||
RootKey: Integer;
|
||||
end;
|
||||
|
||||
|
||||
@ -150,6 +169,7 @@ procedure InitExistingInstallRecords;
|
||||
var
|
||||
product: Integer;
|
||||
begin
|
||||
|
||||
SetArrayLength(ProductsInstalledArray,MaxProdInstalled + 1);
|
||||
for product := 0 to MaxProdInstalled do begin
|
||||
|
||||
@ -162,6 +182,7 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IB4MessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB5Install: begin
|
||||
@ -169,6 +190,7 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := IB5RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB6Install: begin
|
||||
@ -176,6 +198,7 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB65Install: begin
|
||||
@ -183,13 +206,31 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB7Install: begin
|
||||
IB70Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB80Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
IB81Install: begin
|
||||
ProductsInstalledArray[product].Description := IBDesc;
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB1Install: begin
|
||||
@ -197,6 +238,7 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := IBRegKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := IBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB15RCInstall: begin
|
||||
@ -204,6 +246,7 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := FB15RCKey;
|
||||
ProductsInstalledArray[product].RegEntry := LegacyRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB15Install: begin
|
||||
@ -211,22 +254,72 @@ begin
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB2Install: begin
|
||||
FB20Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc;
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB21Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (Win32) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB21_x64_Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (x64) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM64;
|
||||
end;
|
||||
|
||||
FB25Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (Win32) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB25_x64_Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (x64) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM64;
|
||||
end;
|
||||
|
||||
FB30Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (Win32) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM32;
|
||||
end;
|
||||
|
||||
FB30_x64_Install: begin
|
||||
ProductsInstalledArray[product].Description := FBDesc + ' (x64) ';
|
||||
ProductsInstalledArray[product].RegKey := FB2RegKey;
|
||||
ProductsInstalledArray[product].RegEntry := FBRegPathEntry;
|
||||
ProductsInstalledArray[product].MessageFile := FBMessageFile;
|
||||
ProductsInstalledArray[product].RootKey := HKLM64;
|
||||
end;
|
||||
|
||||
end; //case
|
||||
|
||||
ProductsInstalledArray[product].Path := GetRegistryEntry(
|
||||
ProductsInstalledArray[product].RegKey, ProductsInstalledArray[product].RegEntry);
|
||||
ProductsInstalledArray[product].Path := GetRegistryEntry(ProductsInstalledArray[product].RootKey,
|
||||
ProductsInstalledArray[product].RegKey, ProductsInstalledArray[product].RegEntry);
|
||||
|
||||
ProductsInstalledArray[product].RegVersion := GetRegistryEntry(
|
||||
ProductsInstalledArray[product].RegKey, 'Version');
|
||||
ProductsInstalledArray[product].RootKey, ProductsInstalledArray[product].RegKey, 'Version');
|
||||
|
||||
end; //for
|
||||
end; //function
|
||||
@ -386,14 +479,14 @@ begin
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
IB7Install: begin
|
||||
IB70Install: 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 := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB7;
|
||||
ProductsInstalled := ProductsInstalled + IB70;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
@ -436,16 +529,118 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
FB2Install: begin
|
||||
FB20Install: begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '2.0.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB2;
|
||||
ProductsInstalled := ProductsInstalled + FB20;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
IB80Install: 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, '8.0.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB80;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
IB81Install: 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, '8.1.0.0',2) <> 0 then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + IB81;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
FB21Install: begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '2.1.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB21;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
FB21_x64_Install: begin
|
||||
if iswin64 then begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '2.1.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB21_x64;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
FB25Install: begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '2.5.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB25;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
FB25_x64_Install: begin
|
||||
if iswin64 then begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '2.5.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB25_x64;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
FB30Install: begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '3.0.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB30;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end;
|
||||
end;
|
||||
|
||||
FB30_x64_Install: begin
|
||||
if iswin64 then begin
|
||||
if (CompareVersion(ProductsInstalledArray[product].ClientVersion, '3.0.0.0',2) <> 0) then
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled
|
||||
else
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClientInstall) = ClientInstall) then begin
|
||||
ProductsInstalled := ProductsInstalled + FB30_x64;
|
||||
ProductsInstalledCount := ProductsInstalledCount + 1;
|
||||
end
|
||||
end
|
||||
else
|
||||
ProductsInstalledArray[product].InstallType := NotInstalled;
|
||||
end;
|
||||
|
||||
end;//case
|
||||
|
||||
|
||||
@ -497,7 +692,7 @@ procedure SetupSharedFilesArray;
|
||||
// - Libraries
|
||||
// - License files
|
||||
begin
|
||||
SetArrayLength(SharedFileArray,29);
|
||||
SetArrayLength(SharedFileArray,33);
|
||||
|
||||
SharedFileArray[0].Filename := ExpandConstant('{app}')+'\IPLicense.txt';
|
||||
SharedFileArray[1].Filename := ExpandConstant('{app}')+'\IDPLicense.txt';
|
||||
@ -540,7 +735,10 @@ if UsingWinNT then
|
||||
else
|
||||
SharedFileArray[28].Filename := ExpandConstant('{sys}')+'\FIREBI~1.CPL';
|
||||
|
||||
|
||||
SharedFileArray[29].Filename := ExpandConstant('{app}')+'aliases.conf';
|
||||
SharedFileArray[30].Filename := ExpandConstant('{app}')+'firebird.conf';
|
||||
SharedFileArray[31].Filename := ExpandConstant('{app}')+'firebird.log';
|
||||
SharedFileArray[32].Filename := ExpandConstant('{app}')+'security2.fdb';
|
||||
|
||||
end;
|
||||
|
||||
@ -645,34 +843,76 @@ begin
|
||||
result := true;
|
||||
end;
|
||||
|
||||
//Detect any 1.5 or 2.0 server running with default ClassName or mutex
|
||||
function FirebirdDefaultServerRunning: String;
|
||||
|
||||
//Detect server running with default ClassName or mutex
|
||||
var
|
||||
RunningServerVerString: String;
|
||||
|
||||
function FirebirdDefaultServerRunning: Boolean;
|
||||
var
|
||||
Handle: Integer;
|
||||
mutex_found: boolean;
|
||||
mutexes: String;
|
||||
begin
|
||||
result := '';
|
||||
//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');
|
||||
RunningServerVerString := '';
|
||||
Result := false;
|
||||
|
||||
if (Handle > 0) then
|
||||
result := '1.5'
|
||||
else begin
|
||||
mutex_found := CheckForMutexes('FirebirdGuardianMutex,FirebirdServerMutex');
|
||||
if mutex_found then
|
||||
result := '2.0'
|
||||
else begin
|
||||
mutex_found := CheckForMutexes('FirebirdGuardianMutexDefaultInstance,FirebirdServerMutexDefaultInstance');
|
||||
if mutex_found then
|
||||
result := '2.1'
|
||||
end;
|
||||
if FirebirdOneRunning then
|
||||
RunningServerVerString := 'Firebird v1.0 / InterBase';
|
||||
|
||||
//Look for a valid window handle
|
||||
if RunningServerVerString = '' then begin
|
||||
//This is effectivley a test for Firebird running as an application.
|
||||
//This is useful if Firebird is running without the guardian
|
||||
//because prior to v2.0.4 there is no server mutex.
|
||||
Handle := FindWindowByClassName('FB_Disabled');
|
||||
if ( Handle = 0 ) then
|
||||
Handle := FindWindowByClassName('FB_Server');
|
||||
if ( Handle = 0 ) then
|
||||
Handle := FindWindowByClassName('FB_Guard');
|
||||
|
||||
if (Handle > 0) then
|
||||
RunningServerVerString := 'Firebird';
|
||||
end;
|
||||
|
||||
//Look for a firebird mutex
|
||||
if RunningServerVerString = '' then begin
|
||||
//General Notes on testing for mutexes:
|
||||
// - Mutexes are case-sensitive.
|
||||
// - Don't escape the slash in Global\, Local\ etc. (We don't currently use Local\)
|
||||
//
|
||||
// v2.0 notes
|
||||
// - v2.0 prior to 2.0.4 does not create a FirebirdServerMutex mutex,
|
||||
// so server running without guardian is not detected.
|
||||
// - v2.0.4 creates mutexes without the global prefix.
|
||||
// - Later versions (if any) will use the prefix, so we will test for them anyway.
|
||||
mutexes := 'Global\FirebirdGuardianMutex' + ',' +
|
||||
'Global\FirebirdServerMutex' + ',' +
|
||||
'FirebirdGuardianMutex' + ',' +
|
||||
'FirebirdServerMutex';
|
||||
mutex_found := CheckForMutexes(mutexes);
|
||||
|
||||
if mutex_found then
|
||||
RunningServerVerString := 'Firebird';
|
||||
end;
|
||||
|
||||
if RunningServerVerString = '' then begin
|
||||
//v2.1.1 notes
|
||||
// - v2.1.0 creates mutexes without the global prefix.
|
||||
// - v2.1.1 and later should use the correct prefix.
|
||||
mutexes := 'Global\FirebirdGuardianMutexDefaultInstance' + ',' +
|
||||
'Global\FirebirdServerMutexDefaultInstance' + ',' +
|
||||
'FirebirdGuardianMutexDefaultInstance' + ',' +
|
||||
'FirebirdServerMutexDefaultInstance';
|
||||
mutex_found := CheckForMutexes(mutexes);
|
||||
|
||||
if mutex_found then
|
||||
RunningServerVerString := 'Firebird v2.1'
|
||||
end;
|
||||
|
||||
if RunningServerVerString <> '' then
|
||||
Result := True;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
@ -680,7 +920,7 @@ function InstallCPLApplet: boolean;
|
||||
begin
|
||||
result := False;
|
||||
if ( (ConfigureFirebird) AND (not NoCPL) ) then
|
||||
result := (ShouldProcessEntry('ServerComponent\SuperServerComponent', 'InstallCPLAppletTask') = srYes) ;
|
||||
result := IsTaskSelected('InstallCPLAppletTask') ;
|
||||
end;
|
||||
|
||||
|
||||
@ -701,7 +941,7 @@ begin
|
||||
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) );
|
||||
result := ( (not NoLegacyClient) AND (IsTaskSelected('CopyFbClientAsGds32Task') ));
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -716,7 +956,8 @@ end;
|
||||
function CopyFbClientLib: boolean;
|
||||
begin
|
||||
//Note that the default for this is the opposite to CopyGds32.
|
||||
result := ( (CopyFbClient) OR (ShouldProcessEntry('ClientComponent', 'CopyFbClientToSysTask')= srYes) );
|
||||
//result := ( (CopyFbClient) OR (ShouldProcessEntry('ClientComponent', 'CopyFbClientToSysTask')= srYes) );
|
||||
result := ( (not CopyFbClient) AND (IsTaskSelected('CopyFbClientToSysTask') ));
|
||||
end;
|
||||
|
||||
|
||||
@ -728,4 +969,24 @@ begin
|
||||
result := ((not CopyFbClient) and ConfigureFirebird);
|
||||
end;
|
||||
|
||||
function HasWI30: boolean;
|
||||
//We need at least Windows Installer 3.0 available if we
|
||||
//are installing the msi bundles for the VC8 CRT libraries.
|
||||
var
|
||||
VersionStr: String;
|
||||
VerInt: array of Integer;
|
||||
begin
|
||||
Result := False;
|
||||
VersionStr := WIVersion;
|
||||
DecodeVersion(VersionStr, VerInt);
|
||||
if (VerInt[0] >= 3) then
|
||||
Result := True;
|
||||
|
||||
end;
|
||||
|
||||
function HasNotWI30: boolean;
|
||||
//Used to check if O/S does NOT have minimum version of Windows Installer
|
||||
begin
|
||||
result := NOT HasWI30;
|
||||
end;
|
||||
|
||||
|
@ -25,6 +25,8 @@
|
||||
|
||||
Function Prototypes
|
||||
|
||||
function IsWin32: boolean;
|
||||
function Is32BitInstallMode: boolean;
|
||||
function IsVista: boolean;
|
||||
function IsWin2k3: boolean;
|
||||
function IsWinXP: boolean;
|
||||
@ -36,6 +38,7 @@ Function Prototypes
|
||||
function CheckWinsock2(): Boolean;
|
||||
function GetAppPath: String;
|
||||
function GetSysPath: String;
|
||||
function WIVersion: string;
|
||||
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
|
||||
procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
|
||||
function CompareVersion( ver1, ver2: String ) : Integer;
|
||||
@ -67,22 +70,56 @@ Windows NT versions:
|
||||
|
||||
*)
|
||||
|
||||
Type TWindowsVersion = record
|
||||
Major: Cardinal; // Major version number
|
||||
Minor: Cardinal; // Minor version number
|
||||
Build: Cardinal; // Build number
|
||||
NTPlatform: Boolean; // True if an NT-based platform
|
||||
end;
|
||||
(*
|
||||
Windows Installer versions: (extracted from MSDN)
|
||||
Release Version Description
|
||||
-----------------------------------------------
|
||||
v2.0 2.0.2600.0 Released with Windows XP.
|
||||
v2.0 2.0.2600.1 Released with Windows 2000 Server SP3.
|
||||
v2.0 2.0.2600.1183 Released with Windows 2000 Server SP4.
|
||||
v2.0 2.0.2600.2 Released as a redistributable.
|
||||
v2.0 2.0.2600.1106 Released with Windows XP SP1.
|
||||
v2.0 2.0.3790.0 Released with Windows Server 2003.
|
||||
v3.0 3.0.3790.2180 Released with Windows XP SP2.
|
||||
Released as a redistributable.
|
||||
v3.1 3.1.4000.1823 Released as a redistributable.
|
||||
This version has the same functionality as version 3.1.4000.2435.
|
||||
v3.1 3.1.4000.1830 Released with Windows Server 2003 SP1 and
|
||||
Windows XP Professional x64 Edition.
|
||||
Update this version to version 3.1.4000.2435
|
||||
to address the issue discussed in KB898628.
|
||||
v3.1 3.1.4000.2435 Released with a fix to address the issue
|
||||
discussed in KB898628. This is the latest version
|
||||
of Windows Installer 3.1.
|
||||
v4.0 4.0.6000.16386 Released with Windows Vista.
|
||||
v4.0 4.0.6001.16531 or greater Released with Windows Vista SP1 and
|
||||
Windows Server 2008.
|
||||
|
||||
procedure GetWindowsVersionEx(Version: TWindowsVersion);
|
||||
var
|
||||
WinVer: Cardinal;
|
||||
(NB1 - msi.dll stores the correct version number and is updated
|
||||
automatically by Windows Update. msiexec.exe will be the original shipped version.
|
||||
|
||||
NB2 - Re v3.1 build numbers and KB 898628 - This KB article refers to the
|
||||
fact that initial releases of WI 3.1 would error and STOP if an attempt
|
||||
was made to overwrite a system file in the WFP list. Previous behaviour
|
||||
was to error, log and continue. This behaviour is irrelevant to us because
|
||||
we don't do anything sophisticated with the msi. OTOH, if we used msi
|
||||
for all our installation needs this would be a serious problem.
|
||||
|
||||
NB3 - Our installer will not run msiexec on systems before XP. However, some early XP and W2K3
|
||||
systems do not have v3.0 of the Windows Installer.
|
||||
*)
|
||||
|
||||
|
||||
function IsWin32: boolean;
|
||||
//helper function to simplify logic of x86/win64 checks.
|
||||
begin
|
||||
WinVer := GetWindowsVersion;
|
||||
Version.Major := WinVer shr 24;
|
||||
Version.Minor := (WinVer shr 16) and $FF;
|
||||
Version.Build := WinVer and $FFFF;
|
||||
Version.NTPlatform := UsingWinNT;
|
||||
result := not IsWin64;
|
||||
end;
|
||||
|
||||
function Is32BitInstallMode: boolean;
|
||||
//helper function to simplify logic of x86/win64 checks.
|
||||
begin
|
||||
result := not Is64BitInstallMode;
|
||||
end;
|
||||
|
||||
function IsVista: boolean;
|
||||
@ -196,6 +233,15 @@ begin
|
||||
// Result := '"' + Result +'"';
|
||||
end;
|
||||
|
||||
function WIVersion: string;
|
||||
//Get version of Windows Installer
|
||||
var
|
||||
VersionStr: string;
|
||||
begin
|
||||
GetVersionNumbersString(GetSysPath + '\msi.dll', VersionStr);
|
||||
result := VersionStr;
|
||||
end;
|
||||
|
||||
|
||||
(*Based on InnoSetup KB example at http://www13.brinkster.com/vincenzog/isxart.asp?idart=14)*)
|
||||
function ReplaceLine(Filename, StringToFind, NewLine,CommentType: string): boolean;
|
||||
@ -336,10 +382,16 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
function GetRegistryEntry(RegKey, RegEntry: string): String;
|
||||
function GetRegistryEntry(RootKey: Integer; RegKey, RegEntry: string): String;
|
||||
begin
|
||||
result := '';
|
||||
RegQueryStringValue(HKEY_LOCAL_MACHINE, RegKey, RegEntry, Result);
|
||||
Result := '';
|
||||
//if not win64 and RootKey is HKLM64 then we are on a 32-bit box,
|
||||
//so skip looking in registry
|
||||
if ( (RootKey = HKLM64) AND (isWin32) ) then
|
||||
//do nothing
|
||||
Result := ''
|
||||
else
|
||||
RegQueryStringValue(RootKey, RegKey, RegEntry, Result);
|
||||
end;
|
||||
|
||||
|
||||
|
@ -19,12 +19,12 @@
|
||||
; of an existing install directory.
|
||||
; Simon Carter for the WinSock2 detection.
|
||||
; Philippe Makowski for internationalization and french translation
|
||||
; Sergey Nikitin for migrating to ISS v5.
|
||||
|
||||
; 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:
|
||||
; This script has been designed to work with Inno Setup v5.2.3
|
||||
; It is available as a quick start pack from here:
|
||||
; http://www.jrsoftware.org/isdl.php#qsp
|
||||
;
|
||||
;
|
||||
@ -36,24 +36,6 @@
|
||||
; 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.
|
||||
;
|
||||
@ -114,6 +96,7 @@
|
||||
#undef files
|
||||
;We speed up compilation (and hence testing) by not compressing contents.
|
||||
#undef compression
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@ -133,27 +116,42 @@
|
||||
;------If necessary we can turn off i18n by uncommenting this undefine
|
||||
;#undef i18n
|
||||
|
||||
;----- If we are debugging the script (and not executed from command prompt)
|
||||
;----- there is no guarantee that the environment variable exists. However an
|
||||
;----- expression such as #define FB_MAJOR_VER GetEnv("FB_MAJOR_VER") will
|
||||
;----- 'define' the macro anyway so we need to test for a valid env var before
|
||||
;----- we define our macro.
|
||||
#if Len(GetEnv("FB_MAJOR_VER")) > 0
|
||||
#define FB_MAJOR_VER GetEnv("FB_MAJOR_VER")
|
||||
#endif
|
||||
#ifdef FB_MAJOR_VER
|
||||
#define MajorVer FB_MAJOR_VER
|
||||
#endif
|
||||
|
||||
#if Len(GetEnv("FB_MINOR_VER")) > 0
|
||||
#define FB_MINOR_VER GetEnv("FB_MINOR_VER")
|
||||
#endif
|
||||
#ifdef FB_MINOR_VER
|
||||
#define MinorVer FB_MINOR_VER
|
||||
#endif
|
||||
|
||||
#if Len(GetEnv("FB_REV_NO")) > 0
|
||||
#define FB_REV_NO GetEnv("FB_REV_NO")
|
||||
#endif
|
||||
#ifdef FB_REV_NO
|
||||
#define PointRelease FB_REV_NO
|
||||
#endif
|
||||
|
||||
#if Len(GetEnv("FB_BUILD_NO")) > 0
|
||||
#define FB_BUILD_NO GetEnv("FB_BUILD_NO")
|
||||
#endif
|
||||
#ifdef FB_BUILD_NO
|
||||
#define BuildNumber FB_BUILD_NO
|
||||
#endif
|
||||
|
||||
#if Len(GetEnv("FBBUILD_PACKAGE_NUMBER")) > 0
|
||||
#define FBBUILD_PACKAGE_NUMBER GetEnv("FBBUILD_PACKAGE_NUMBER")
|
||||
#endif
|
||||
#ifdef FBBUILD_PACKAGE_NUMBER
|
||||
#define PackageNumber FBBUILD_PACKAGE_NUMBER
|
||||
#endif
|
||||
@ -167,16 +165,21 @@
|
||||
#endif
|
||||
#define MyAppVerName MyAppName + " " + MyAppVerString
|
||||
|
||||
|
||||
;---- If we haven't already set PlatformTarget then pick it up from the environment.
|
||||
#ifndef PlatformTarget
|
||||
#define PlatformTarget GetEnv("FB_TARGET_PLATFORM")
|
||||
#endif
|
||||
#if PlatformTarget == ""
|
||||
#define PlatformTarget "win32"
|
||||
#endif
|
||||
|
||||
;This location is relative to SourceDir (declared below)
|
||||
#define FilesDir="output"
|
||||
#define msvc_version 7
|
||||
|
||||
;BaseVer should be used for all v2.n installs.
|
||||
;This allows us to upgrade silently from 2.0 to 2.1
|
||||
#define BaseVer MajorVer + "_0"
|
||||
;BaseVer should be used for all v2.0.n installs.
|
||||
;This allows us to upgrade silently from 2.1.m to 2.1.n
|
||||
#define BaseVer MajorVer + "_" + MinorVer
|
||||
#define AppVer MajorVer + "_" + MinorVer
|
||||
#define GroupnameVer MajorVer + "." + MinorVer
|
||||
|
||||
@ -246,32 +249,34 @@ Compression=none
|
||||
SolidCompression=yes
|
||||
#endif
|
||||
|
||||
ShowUndisplayableLanguages={#defined iss_debug}
|
||||
AllowNoIcons=true
|
||||
AlwaysShowComponentsList=true
|
||||
PrivilegesRequired=admin
|
||||
|
||||
ShowTasksTreeLines=false
|
||||
LanguageDetectionMethod=uilanguage
|
||||
|
||||
[Languages]
|
||||
Name: en; MessagesFile: compiler:Default.isl; InfoBeforeFile: {#ScriptsDir}\installation_readme.txt; InfoAfterFile: {#ScriptsDir}\readme.txt;
|
||||
#ifdef i18n
|
||||
Name: ba; MessagesFile: compiler:Languages\Bosnian.isl; InfoBeforeFile: {#ScriptsDir}\ba\Instalacija_ProcitajMe.txt; InfoAfterFile: {#ScriptsDir}\ba\ProcitajMe.txt;
|
||||
Name: cz; MessagesFile: compiler:Languages\Czech.isl; InfoBeforeFile: {#ScriptsDir}\installation_readme.txt; InfoAfterFile: {#ScriptsDir}\readme.txt;
|
||||
Name: fr; MessagesFile: compiler:Languages\French.isl; InfoBeforeFile: {#ScriptsDir}\fr\installation_lisezmoi.txt; InfoAfterFile: {#ScriptsDir}\fr\lisezmoi.txt;
|
||||
Name: de; MessagesFile: compiler:Languages\German.isl; InfoBeforeFile: {#ScriptsDir}\de\installation_liesmich.txt; InfoAfterFile: {#ScriptsDir}\de\liesmich.txt;
|
||||
Name: es; MessagesFile: compiler:Languages\Spanish.isl; InfoBeforeFile: {#ScriptsDir}\es\leame_instalacion.txt; InfoAfterFile: {#ScriptsDir}\es\leame.txt;
|
||||
Name: hu; MessagesFile: compiler:Languages\Hungarian.isl; InfoBeforeFile: {#ScriptsDir}\hu\telepitesi_segedlet.txt; InfoAfterFile: {#ScriptsDir}\hu\olvass_el.txt;
|
||||
Name: it; MessagesFile: compiler:Languages\Italian.isl; InfoBeforeFile: {#ScriptsDir}\it\leggimi_installazione.txt; InfoAfterFile: {#ScriptsDir}\it\leggimi.txt
|
||||
Name: pl; MessagesFile: compiler:Languages\Polish.isl; InfoBeforeFile: {#ScriptsDir}\pl\instalacja_czytajto.txt; InfoAfterFile: {#ScriptsDir}\pl\czytajto.txt;
|
||||
Name: pt; MessagesFile: compiler:Languages\PortugueseStd.isl; InfoBeforeFile: {#ScriptsDir}\pt\instalacao_leia-me.txt; InfoAfterFile: {#ScriptsDir}\pt\leia-me.txt
|
||||
Name: pt; MessagesFile: compiler:Languages\Portuguese.isl; InfoBeforeFile: {#ScriptsDir}\pt\instalacao_leia-me.txt; InfoAfterFile: {#ScriptsDir}\pt\leia-me.txt
|
||||
Name: ru; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: {#ScriptsDir}\ru\installation_readme.txt; InfoAfterFile: {#ScriptsDir}\ru\readme.txt;
|
||||
Name: si; MessagesFile: compiler:Languages\Slovenian.isl; InfoBeforeFile: {#ScriptsDir}\si\instalacija_precitajMe.txt; InfoAfterFile: {#ScriptsDir}\readme.txt;
|
||||
Name: sk; MessagesFile: compiler:Languages\Slovak.isl; InfoBeforeFile: {#ScriptsDir}\installation_readme.txt; InfoAfterFile: {#ScriptsDir}\readme.txt;
|
||||
#endif
|
||||
|
||||
[Messages]
|
||||
en.BeveledLabel=English
|
||||
#ifdef i18n
|
||||
ba.BeveledLabel=Bosanski
|
||||
cz.BeveledLabel=?eština
|
||||
fr.BeveledLabel=Français
|
||||
de.BeveledLabel=Deutsch
|
||||
es.BeveledLabel=Español
|
||||
@ -281,12 +286,14 @@ pl.BeveledLabel=Polski
|
||||
pt.BeveledLabel=Português
|
||||
ru.BeveledLabel=Ðóññêèé
|
||||
si.BeveledLabel=Slovenski
|
||||
sk.BeveledLabel=Sloven?ina
|
||||
#endif
|
||||
|
||||
[CustomMessages]
|
||||
#include "custom_messages.inc"
|
||||
#ifdef i18n
|
||||
#include "ba\custom_messages_ba.inc"
|
||||
#include "cz\custom_messages_cz.inc"
|
||||
#include "fr\custom_messages_fr.inc"
|
||||
#include "de\custom_messages_de.inc"
|
||||
#include "es\custom_messages_es.inc"
|
||||
@ -296,6 +303,7 @@ si.BeveledLabel=Slovenski
|
||||
#include "pt\custom_messages_pt.inc"
|
||||
#include "ru\custom_messages_ru.inc"
|
||||
#include "si\custom_messages_si.inc"
|
||||
#include "sk\custom_messages_sk.inc"
|
||||
#endif
|
||||
|
||||
#ifdef iss_debug
|
||||
@ -339,7 +347,8 @@ Name: CopyFbClientAsGds32Task; Description: {cm:CopyFbClientAsGds32Task}; Compon
|
||||
|
||||
[Run]
|
||||
;Always register Firebird
|
||||
Filename: {app}\bin\instreg.exe; Parameters: "install "; StatusMsg: {cm:instreg}; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized
|
||||
;Only register Firebird if we are installing AND configuring
|
||||
Filename: {app}\bin\instreg.exe; Parameters: "install "; StatusMsg: {cm:instreg}; MinVersion: 4.0,4.0; Components: ClientComponent; Flags: runminimized; Check: ConfigureFirebird;
|
||||
|
||||
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
|
||||
@ -348,8 +357,8 @@ Filename: {app}\bin\instclient.exe; Parameters: "install gds32"; StatusMsg: {cm:
|
||||
;If on NT/Win2k etc and 'Install and start service' requested
|
||||
;First, if installing service we must try and remove remnants of old service. Otherwise the new install will fail and when we start the service the old service will be started.
|
||||
Filename: {app}\bin\instsvc.exe; Parameters: "remove "; StatusMsg: {cm:instsvcSetup}; MinVersion: 0,4.0; Components: ServerComponent; Flags: runminimized; Tasks: UseServiceTask; Check: ConfigureFirebird;
|
||||
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
|
||||
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 runascurrentuser; 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
|
||||
@ -402,6 +411,7 @@ Source: {#ScriptsDir}\readme.txt; DestDir: {app}; Components: DevAdminComponent;
|
||||
#ifdef i18n
|
||||
;Translated files
|
||||
Source: {#ScriptsDir}\ba\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: ba;
|
||||
;Source: {#ScriptsDir}\cz\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: cz;
|
||||
Source: {#ScriptsDir}\fr\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: fr;
|
||||
Source: {#ScriptsDir}\de\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: de;
|
||||
Source: {#ScriptsDir}\es\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: es;
|
||||
@ -411,6 +421,7 @@ Source: {#ScriptsDir}\pl\*.txt; DestDir: {app}\doc; Components: DevAdminComponen
|
||||
Source: {#ScriptsDir}\pt\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: pt;
|
||||
Source: {#ScriptsDir}\ru\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: ru;
|
||||
Source: {#ScriptsDir}\si\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: si;
|
||||
;Source: {#ScriptsDir}\sk\*.txt; DestDir: {app}\doc; Components: DevAdminComponent; Flags: ignoreversion; Languages: sk;
|
||||
#endif
|
||||
Source: {#FilesDir}\firebird.conf; DestDir: {app}; DestName: firebird.conf.default; Components: ServerComponent; check: FirebirdConfExists;
|
||||
Source: {#FilesDir}\firebird.conf; DestDir: {app}; DestName: firebird.conf; Components: ServerComponent; Flags: uninsneveruninstall; check: NoFirebirdConfExists
|
||||
@ -443,9 +454,9 @@ Source: {#FilesDir}\bin\icuin30.dll; DestDir: {app}\bin; Components: ServerCompo
|
||||
Source: {#FilesDir}\bin\icudt30.dll; 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\
|
||||
; NOTE: These dll's MUST never be sourced from the local system32 directory.
|
||||
; Deploy libraries from vcredist if MSVC6 is used. Use %FrameworkSDKDir% if compiling with Visual Studio.
|
||||
; The BuildExecutableInstall.bat will attempt to locate them and place them in {#FilesDir}\system32\
|
||||
#if msvc_version == 6
|
||||
Source: {#FilesDir}\bin\msvcrt.dll; DestDir: {app}\bin; Components: ClientComponent;
|
||||
Source: {#FilesDir}\bin\msvcrt.dll; DestDir: {sys}; Components: ClientComponent; Flags: sharedfile onlyifdoesntexist uninsneveruninstall;
|
||||
@ -496,6 +507,7 @@ Source: {#FilesDir}\examples\udf\*.*; DestDir: {app}\examples\udf; Components: D
|
||||
Source: {#FilesDir}\bin\fbclient.pdb; DestDir: {app}\bin; Components: ClientComponent;
|
||||
Source: {#FilesDir}\bin\fb_inet_server.pdb; DestDir: {app}\bin; Components: ServerComponent\ClassicServerComponent;
|
||||
Source: {#FilesDir}\bin\fbserver.pdb; DestDir: {app}\bin; Components: ServerComponent\SuperServerComponent;
|
||||
;Source: {#FilesDir}\bin\fbembed.pdb; DestDir: {app}\bin; Components: ClientComponent;
|
||||
#endif
|
||||
|
||||
[UninstallRun]
|
||||
@ -508,7 +520,7 @@ Filename: {app}\bin\instreg.exe; Parameters: " remove"; StatusMsg: {cm:instreg};
|
||||
[UninstallDelete]
|
||||
Type: files; Name: {app}\*.lck
|
||||
Type: files; Name: {app}\*.evn
|
||||
|
||||
Type: dirifempty; Name: {app}
|
||||
|
||||
[_ISTool]
|
||||
EnableISX=true
|
||||
@ -542,6 +554,14 @@ Var
|
||||
NoLegacyClient: Boolean; // pass /nogds32 on command line.
|
||||
CopyFbClient: Boolean; // pass /copyfbclient on command line.
|
||||
|
||||
// Options for scripted uninstall.
|
||||
CleanUninstall: Boolean; // If /clean is passed to the uninstaller it will delete
|
||||
// user config files - firebird.conf, firebird.log,
|
||||
// aliases.conf and the security database.
|
||||
|
||||
#ifdef setuplogging
|
||||
OkToCopyLog : Boolean; // Set when installation is complete.
|
||||
#endif
|
||||
|
||||
#include "FirebirdInstallSupportFunctions.inc"
|
||||
|
||||
@ -565,8 +585,7 @@ if ProductsInstalledCount = 0 then
|
||||
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);
|
||||
InstallSummaryArray[i] := Format(ProductsInstalledArray[product].Description, [ProductsInstalledArray[product].ActualVersion]);
|
||||
|
||||
if (ProductsInstalledArray[product].ServerVersion <> '') then begin
|
||||
if ((ProductsInstalledArray[product].InstallType AND ClassicServerInstall) = ClassicServerInstall) then
|
||||
@ -597,7 +616,7 @@ for i:=0 to ProductsInstalledCount-1 do
|
||||
InstallSummary := InstallSummary + InstallSummaryArray[i] + #13;
|
||||
|
||||
//If FB2 is installed
|
||||
If ((ProductsInstalled AND FB2) = FB2) then
|
||||
If ((ProductsInstalled AND FB20 ) = FB20 ) then
|
||||
InstallSummary := InstallSummary
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix1}')
|
||||
+#13 + ExpandConstant('{cm:InstallSummarySuffix2}')
|
||||
@ -607,9 +626,9 @@ If ((ProductsInstalled AND FB2) = FB2) then
|
||||
;
|
||||
|
||||
if ProductsInstalledCount = 1 then
|
||||
StatusDescription := Format2(ExpandConstant('{cm:InstalledProducts}'), IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountSingular}'))
|
||||
StatusDescription := Format(ExpandConstant('{cm:InstalledProducts}'), [IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountSingular}')])
|
||||
else
|
||||
StatusDescription := Format2(ExpandConstant('{cm:InstalledProducts}'), IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountPlural}'));
|
||||
StatusDescription := Format(ExpandConstant('{cm:InstalledProducts}'), [IntToStr(ProductsInstalledCount), ExpandConstant('{cm:InstalledProdCountPlural}')]);
|
||||
|
||||
Result := StatusDescription
|
||||
+#13
|
||||
@ -637,24 +656,12 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
//If Fb2.0 is installed then we can install over it.
|
||||
//unless we find the server running.
|
||||
//If existing install of the same majorver.minorver is
|
||||
//found then we can upgrade it.
|
||||
if (ProductsInstalledCount = 1) AND
|
||||
((ProductsInstalled AND FB2) = FB2) then begin
|
||||
VerString := ( FirebirdDefaultServerRunning );
|
||||
if VerString <> '' then begin
|
||||
result := false;
|
||||
MsgBox( #13+Format1(ExpandConstant('{cm:FbRunning1}'),VerString)
|
||||
+#13
|
||||
+#13+ExpandConstant('{cm:FbRunning2}')
|
||||
+#13+ExpandConstant('{cm:FbRunning3}')
|
||||
+#13, mbError, MB_OK);
|
||||
exit;
|
||||
end
|
||||
else begin
|
||||
((ProductsInstalled AND FB20 ) = FB20 ) then begin
|
||||
result := true;
|
||||
exit;
|
||||
end
|
||||
end
|
||||
;
|
||||
|
||||
@ -678,16 +685,10 @@ function InitializeSetup(): Boolean;
|
||||
var
|
||||
i: Integer;
|
||||
CommandLine: String;
|
||||
VerString: String;
|
||||
begin
|
||||
|
||||
result := true;
|
||||
|
||||
if not CheckWinsock2 then begin
|
||||
result := False;
|
||||
exit;
|
||||
end
|
||||
|
||||
CommandLine:=GetCmdTail;
|
||||
|
||||
if ((pos('HELP',Uppercase(CommandLine)) > 0) or
|
||||
@ -713,6 +714,17 @@ begin
|
||||
if pos('COPYFBCLIENT', Uppercase(CommandLine))>0 then
|
||||
CopyFbClient := True;
|
||||
|
||||
// Check if a server is running - we cannot continue if it is.
|
||||
if FirebirdDefaultServerRunning then begin
|
||||
result := false;
|
||||
exit;
|
||||
end;
|
||||
|
||||
if not CheckWinsock2 then begin
|
||||
result := False;
|
||||
exit;
|
||||
end
|
||||
|
||||
//By default we want to install and confugure,
|
||||
//unless subsequent analysis suggests otherwise.
|
||||
InstallAndConfigure := Install + Configure;
|
||||
@ -722,20 +734,7 @@ begin
|
||||
InitExistingInstallRecords;
|
||||
AnalyzeEnvironment;
|
||||
result := AnalysisAssessment;
|
||||
if result then begin
|
||||
//There is a possibility that all our efforts to detect an
|
||||
//install were in vain and a server _is_ running...
|
||||
VerString := FirebirdDefaultServerRunning;
|
||||
if ( VerString <> '' ) then begin
|
||||
result := false;
|
||||
MsgBox( #13+ExpandConstant('{cm:FbRunning1,VerString}')
|
||||
+#13
|
||||
+#13+ExpandConstant('{cm:FbRunning2}')
|
||||
+#13+ExpandConstant('{cm:FbRunning3}')
|
||||
+#13, mbError, MB_OK);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
|
||||
@ -748,13 +747,28 @@ begin
|
||||
// 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);
|
||||
ShellExec('open', sMSWinsock2Update, '', '', SW_SHOWNORMAL, ewNoWait, ErrCode);
|
||||
|
||||
if RunningServerVerString <> '' then
|
||||
MsgBox( #13+Format(ExpandConstant('{cm:FbRunning1}'), [RunningServerVerString])
|
||||
+#13
|
||||
+#13+ExpandConstant('{cm:FbRunning2}')
|
||||
+#13+ExpandConstant('{cm:FbRunning3}')
|
||||
+#13, mbError, MB_OK);
|
||||
|
||||
#ifdef setuplogging
|
||||
if OkToCopyLog then
|
||||
FileCopy (ExpandConstant ('{log}'), ExpandConstant ('{app}\InstallationLogFile.log'), FALSE);
|
||||
|
||||
RestartReplace (ExpandConstant ('{log}'), '');
|
||||
#endif /* setuplogging */
|
||||
|
||||
end;
|
||||
|
||||
|
||||
//This function tries to find an existing install of Firebird 1.5
|
||||
//This function tries to find an existing install of Firebird 2.n
|
||||
//If it succeeds it suggests that directory for the install
|
||||
//Otherwise it suggests the default for Fb 1.5
|
||||
//Otherwise it suggests the default for Fb 2.n
|
||||
function ChooseInstallDir(Default: String): String;
|
||||
var
|
||||
InterBaseRootDir,
|
||||
@ -781,7 +795,7 @@ begin
|
||||
InstallRootDir := Default; // but the user has changed the default
|
||||
|
||||
if (( InstallRootDir = '') and
|
||||
( FirebirdVer[0] = 2 ) and ( FirebirdVer[1] = 0 ) ) then // Firebird 2.0 is installed
|
||||
( FirebirdVer[0] = {#MajorVer} ) and ( FirebirdVer[1] = {#MinorVer} ) ) then // Firebird 2.n is installed
|
||||
InstallRootDir := FirebirdRootDir; // but the user has changed the default
|
||||
|
||||
// if we haven't found anything then try the FIREBIRD env var
|
||||
@ -813,13 +827,12 @@ begin
|
||||
else
|
||||
ServerType := ' -superserver ';
|
||||
|
||||
|
||||
if ShouldProcessEntry('ServerComponent', 'AutoStartTask')= srYes then
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('AutoStartTask') then
|
||||
SvcParams := ' -auto '
|
||||
else
|
||||
SvcParams := ' -demand ';
|
||||
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('UseGuardianTask') then
|
||||
SvcParams := SvcParams + ServerType + ' -guardian'
|
||||
else
|
||||
SvcParams := SvcParams + ServerType;
|
||||
@ -830,22 +843,22 @@ end;
|
||||
function InstallGuardianIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('UseApplicationTask') then
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('UseGuardianTask') then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function InstallServerIcon(): Boolean;
|
||||
begin
|
||||
result := false;
|
||||
if ShouldProcessEntry('ServerComponent', 'UseApplicationTask')= srYes then
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srNo then
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('UseApplicationTask') then
|
||||
if NOT (IsComponentSelected('ServerComponent') and IsTaskSelected('UseGuardianTask')) then
|
||||
result := true;
|
||||
end;
|
||||
|
||||
function StartApp(Default: String): String;
|
||||
begin
|
||||
if ShouldProcessEntry('ServerComponent', 'UseGuardianTask')= srYes then begin
|
||||
if IsComponentSelected('ServerComponent') and IsTaskSelected('UseGuardianTask') then begin
|
||||
Result := GetAppPath+'\bin\fbguard.exe';
|
||||
if ClassicInstallChosen then
|
||||
Result := Result + ' -c';
|
||||
@ -863,8 +876,8 @@ 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
|
||||
if ( IsComponentSelected('ServerComponent') and IsTaskSelected('AutoStartTask') ) and
|
||||
( IsComponentSelected('ServerComponent') and IsTaskSelected('UseApplicationTask') ) then
|
||||
result := false;
|
||||
end;
|
||||
|
||||
@ -896,7 +909,7 @@ begin
|
||||
//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
|
||||
if NOT (IsComponentSelected('ServerComponent') and IsTaskSelected('UseGuardianTask')) then
|
||||
ReplaceLine(GetAppPath+'\firebird.conf','GuardianOption','GuardianOption = 0','#');
|
||||
end;
|
||||
end;
|
||||
@ -920,22 +933,30 @@ begin
|
||||
end;
|
||||
|
||||
|
||||
procedure CurStepChanged(CurStep: Integer);
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
var
|
||||
AppStr: String;
|
||||
ReadMeFileStr: String;
|
||||
begin
|
||||
case CurStep of
|
||||
csCopy: begin
|
||||
ssInstall: begin
|
||||
SetupSharedFilesArray;
|
||||
GetSharedLibCountBeforeCopy;
|
||||
end;
|
||||
|
||||
csFinished: begin
|
||||
ssPostInstall: begin
|
||||
//Manually set the sharedfile count of these files.
|
||||
IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\firebird.conf', false);
|
||||
IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\firebird.log', false);
|
||||
IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\aliases.conf', false);
|
||||
IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\security2.fdb', false);
|
||||
end;
|
||||
|
||||
ssDone: 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
|
||||
if (IsComponentSelected('ServerComponent') and IsTaskSelected('AutoStartTask') ) and
|
||||
( IsComponentSelected('ServerComponent') and IsTaskSelected('UseApplicationTask') ) then begin
|
||||
AppStr := StartApp('')+' -a';
|
||||
RegWriteStringValue (HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 'Firebird', AppStr);
|
||||
end;
|
||||
@ -954,6 +975,10 @@ begin
|
||||
DeleteFile(GetAppPath+'\doc\'+ReadMeFileStr);
|
||||
end;
|
||||
|
||||
#ifdef setuplogging
|
||||
OkToCopyLog := True;
|
||||
#endif
|
||||
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -961,7 +986,7 @@ end;
|
||||
function StartEngine: boolean;
|
||||
begin
|
||||
if ConfigureFirebird then
|
||||
result := not FirebirdOneRunning;
|
||||
result := not FirebirdDefaultServerRunning;
|
||||
end;
|
||||
|
||||
|
||||
@ -992,6 +1017,60 @@ begin
|
||||
Result := not fileexists(GetAppPath+'\firebird.conf');
|
||||
end;
|
||||
|
||||
function InitializeUninstall(): Boolean;
|
||||
var
|
||||
CommandLine: String;
|
||||
begin
|
||||
CommandLine:=GetCmdTail;
|
||||
if pos('CLEAN',Uppercase(CommandLine))>0 then
|
||||
CleanUninstall:=True
|
||||
else
|
||||
CleanUninstall:=False;
|
||||
|
||||
//MUST return a result of true, otherwise uninstall will abort!
|
||||
result := true;
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
|
||||
case CurUninstallStep of
|
||||
|
||||
// usAppMutexCheck :
|
||||
|
||||
// usUninstall :
|
||||
|
||||
usPostUninstall : begin
|
||||
// We are manually handling the share count of these files, so we must
|
||||
// a) Decrement shared count of each one and
|
||||
// b) If Decrement reaches 0 (ie, function returns true) then we
|
||||
// test if CleanUninstall has been passed.
|
||||
if DecrementSharedCount(Is64BitInstallMode, GetAppPath+'\firebird.conf') then
|
||||
if CleanUninstall then
|
||||
DeleteFile(GetAppPath+'\firebird.conf');
|
||||
|
||||
if DecrementSharedCount(Is64BitInstallMode, GetAppPath+'\firebird.log') then
|
||||
if CleanUninstall then
|
||||
DeleteFile(GetAppPath+'\firebird.log');
|
||||
|
||||
if DecrementSharedCount(Is64BitInstallMode, GetAppPath+'\aliases.conf') then
|
||||
if CleanUninstall then
|
||||
DeleteFile(GetAppPath+'\aliases.conf');
|
||||
|
||||
if DecrementSharedCount(Is64BitInstallMode, GetAppPath+'\security2.fdb') then
|
||||
if CleanUninstall then
|
||||
DeleteFile(GetAppPath+'\security2.fdb');
|
||||
|
||||
end;
|
||||
|
||||
// usDone :
|
||||
|
||||
end;
|
||||
|
||||
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
end.
|
||||
|
||||
|
@ -8,11 +8,11 @@ o Setup Command Line Parameters
|
||||
o Parameters specific to Firebird installs
|
||||
o Setup exit codes
|
||||
o Uninstall Command Line Parameters
|
||||
o Parameters specific to Firebird uninstalls
|
||||
o Uninstaller Exit Codes
|
||||
|
||||
|
||||
(These notes are taken directly from the InnoSetup 4.2.7 documentation,
|
||||
|
||||
(These notes are taken directly from the InnoSetup 5.1.12 documentation,
|
||||
except for Firebird specific parameters.)
|
||||
|
||||
Quick summary of available parameters
|
||||
@ -26,11 +26,16 @@ Setup parameters specific to the Firebird Installer
|
||||
/NOGDS32
|
||||
/COPYFBCLIENT
|
||||
/COMPONENTS="comma separated list of component names"
|
||||
/TASKS="comma separated list of task names"
|
||||
/MERGETASKS="comma separated list of task names"
|
||||
|
||||
Setup parameters specific to the Firebird Uninstaller
|
||||
/CLEAN
|
||||
|
||||
General parameters available to all InnoSetup based installers
|
||||
/SP-
|
||||
/SILENT | /VERYSILENT [/SUPPRESSMSGBOXES]
|
||||
/LOG
|
||||
/LOG[="filename"]
|
||||
/NOCANCEL
|
||||
/NORESTART
|
||||
/RESTARTEXITCODE=exit code
|
||||
@ -45,78 +50,128 @@ General parameters available to all InnoSetup based installers
|
||||
Setup Command Line Parameters
|
||||
-----------------------------
|
||||
|
||||
/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
|
||||
The Setup program accepts optional command line parameters. These can be
|
||||
useful to system administrators, and to other programs calling the Setup
|
||||
program.
|
||||
|
||||
/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
|
||||
|
||||
/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.
|
||||
|
||||
/SUPPRESSMSGBOXES
|
||||
Instructs Setup to suppress message boxes. Only has an effect when
|
||||
combined with '/SILENT' and '/VERYSILENT'.
|
||||
|
||||
The default response in situations where there's a choice is:
|
||||
|
||||
Yes in a 'Keep newer file?' situation.
|
||||
|
||||
No in a 'File exists, confirm overwrite.' situation.
|
||||
|
||||
Abort in Abort/Retry situations.
|
||||
|
||||
Cancel in Retry/Cancel situations.
|
||||
|
||||
Yes (=continue) in a DiskSpaceWarning/DirExists/DirDoesntExist/
|
||||
NoUninstallWarning/ExitSetupMessage/ConfirmUninstall situation.
|
||||
|
||||
Yes (=restart) in a FinishedRestartMessage/UninstalledAndNeedsRestart situation.
|
||||
|
||||
5 message boxes are not suppressible:
|
||||
|
||||
The About Setup message box.
|
||||
|
||||
The Exit Setup? message box.
|
||||
|
||||
The FileNotInDir2 message box displayed when Setup requires a
|
||||
new disk to be inserted and the disk was not found.
|
||||
|
||||
Any (error) message box displayed before Setup (or Uninstall)
|
||||
could read the command line parameters.
|
||||
|
||||
Any message box displayed by [Code] support function MsgBox.
|
||||
|
||||
/LOG
|
||||
Causes Setup to create a log file in the user's TEMP directory detailing
|
||||
file installation and [Run] 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.)
|
||||
|
||||
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.
|
||||
|
||||
/LOG="filename"
|
||||
Same as /LOG, except it allows you to specify a fixed path/filename to
|
||||
use for the log file. If a file with the specified name already exists
|
||||
it will be overwritten. If the file cannot be created, Setup will abort
|
||||
with an error message.
|
||||
|
||||
/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.
|
||||
|
||||
|
||||
/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.
|
||||
|
||||
Don't forget to use quotes if the filename contains spaces.
|
||||
|
||||
|
||||
/SAVEINF="filename"
|
||||
Instructs Setup to save installation settings to the specified file. 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. When a valid /LANG
|
||||
parameter is used, the Select Language dialog will be suppressed.
|
||||
|
||||
/DIR="x:\dirname"
|
||||
Instructs Setup to save installation settings to the specified file.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
|
||||
/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 a Start Menu folder
|
||||
check box on the Select Start Menu Folder wizard page.
|
||||
|
||||
|
||||
Parameters specific to Firebird installs
|
||||
----------------------------------------
|
||||
@ -140,16 +195,51 @@ Parameters specific to Firebird installs
|
||||
|
||||
would be required for a full install.
|
||||
|
||||
/TASKS="comma separated list of task names"
|
||||
|
||||
Specifies a list of tasks that should be initially selected or
|
||||
deselected. To deselect a task, prefix its name with a "!" character.
|
||||
|
||||
Choose from - UseGuardianTask
|
||||
UseApplicationTask
|
||||
UseServiceTask
|
||||
AutoStartTask
|
||||
InstallCPLAppletTask
|
||||
MenuGroupTask
|
||||
CopyFbClientToSysTask
|
||||
CopyFbClientAsGds32Task
|
||||
|
||||
Only the specified tasks (and their children) will be selected; the rest
|
||||
will be deselected. Use the /MERGETASKS parameter instead if you want to
|
||||
keep the default set of tasks and only select/deselect some of them.
|
||||
|
||||
By default the following tasks are run:
|
||||
|
||||
UseGuardianTask
|
||||
UseServiceTask
|
||||
AutoStartTask
|
||||
InstallCPLAppletTask
|
||||
MenuGroupTask
|
||||
CopyFbClientAsGds32Task
|
||||
|
||||
The /TASKS option is not recommended for use with the /NOCPL, NOGDS32
|
||||
or /COPYFBCLIENT.
|
||||
|
||||
|
||||
Make sure that your component list is _only_ separated by commas.
|
||||
/MERGETASKS="comma separated list of task names"
|
||||
|
||||
Like the /TASKS parameter, except the specified tasks will be merged
|
||||
with the set of tasks that would have otherwise been selected by
|
||||
default.
|
||||
|
||||
If UsePreviousTasks is set to yes, the specified tasks will be
|
||||
selected/deselected after any previous tasks are restored.
|
||||
|
||||
|
||||
/FORCE
|
||||
|
||||
Tells the installer to ignore its analysis of the existing
|
||||
environment. It will attempt to install and configure Firebird 2.0 as
|
||||
environment. It will attempt to install and configure Firebird 2.1 as
|
||||
if no previous version of Firebird or InterBase was installed.
|
||||
|
||||
This can be useful if you have a seriously broken installation that
|
||||
@ -168,12 +258,16 @@ Parameters specific to Firebird installs
|
||||
|
||||
o You may wish to use an alternative cpl applet.
|
||||
|
||||
(This option is not intended to be used with the /TASKS parameter.)
|
||||
|
||||
|
||||
/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.
|
||||
|
||||
(This option is not intended to be used with the /TASKS parameter.)
|
||||
|
||||
|
||||
/COPYFBCLIENT
|
||||
|
||||
@ -185,6 +279,7 @@ Parameters specific to Firebird installs
|
||||
doc/README.Win32LibraryInstallation.txt
|
||||
for more information.
|
||||
|
||||
(This option is not intended to be used with the /TASKS parameter.)
|
||||
|
||||
|
||||
Setup Exit Codes
|
||||
@ -231,37 +326,83 @@ The Setup program may return one of the following exit codes:
|
||||
|
||||
Uninstaller Command Line Parameters
|
||||
===================================
|
||||
The uninstaller program (unins???.exe) accepts optional command line parameters.
|
||||
These can be useful to system administrators, and to other programs calling the
|
||||
uninstaller program.
|
||||
|
||||
/SILENT, /VERYSILENT
|
||||
When specified, the uninstaller will not ask the user for
|
||||
startup confirmation or display a message stating that uninstall is complete.
|
||||
Shared files that are no longer in use are deleted automatically without
|
||||
prompting. Any critical error messages will still be shown on the screen. When
|
||||
'/VERYSILENT' is specified, the uninstallation progress window is not displayed.
|
||||
If a restart is necessary and the '/NORESTART' command isn't used (see below)
|
||||
and '/VERYSILENT' is specified, the uninstaller will reboot without asking.
|
||||
The uninstaller program (unins???.exe) accepts optional command line
|
||||
parameters. These can be useful to system administrators, and to other
|
||||
programs calling the uninstaller program.
|
||||
|
||||
/NORESTART
|
||||
Instructs the uninstaller not to reboot even if it's necessary.
|
||||
/SILENT, /VERYSILENT
|
||||
When specified, the uninstaller will not ask the user for startup
|
||||
confirmation or display a message stating that uninstall is complete.
|
||||
Shared files that are no longer in use are deleted automatically without
|
||||
prompting. Any critical error messages will still be shown on the
|
||||
screen. When '/VERYSILENT' is specified, the uninstallation progress
|
||||
window is not displayed.
|
||||
|
||||
If a restart is necessary and the '/NORESTART' command isn't used (see
|
||||
below) and '/VERYSILENT' is specified, the uninstaller will reboot
|
||||
without asking.
|
||||
|
||||
/SUPPRESSMSGBOXES
|
||||
Instructs the uninstaller to suppress message boxes. Only has an effect
|
||||
when combined with '/SILENT' and '/VERYSILENT'. See '/SUPPRESSMSGBOXES'
|
||||
under Setup Command Line Parameters for more details.
|
||||
|
||||
/LOG
|
||||
Causes Uninstall to create a log file in the user's TEMP directory
|
||||
detailing file uninstallation and [UninstallRun] actions taken during
|
||||
the uninstallation process. This can be a helpful debugging aid.
|
||||
|
||||
The log file is created with a unique name based on the current date.
|
||||
(It will not overwrite or append to existing files.)
|
||||
|
||||
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.
|
||||
|
||||
/LOG="filename"
|
||||
Same as /LOG, except it allows you to specify a fixed path/filename to
|
||||
use for the log file. If a file with the specified name already exists
|
||||
it will be overwritten. If the file cannot be created, Uninstall will
|
||||
abort with an error message.
|
||||
|
||||
/NORESTART
|
||||
Instructs the uninstaller not to reboot even if it's necessary.
|
||||
|
||||
|
||||
Parameters specific to Firebird uninstalls
|
||||
------------------------------------------
|
||||
|
||||
/CLEAN
|
||||
|
||||
Uninstallation has always left the following files in place after
|
||||
the uninstallation process hase completed:
|
||||
|
||||
firebird.conf
|
||||
aliases.conf
|
||||
firebird.log
|
||||
security2.fdb
|
||||
|
||||
The assumption is that these files will be useful to users
|
||||
re-installing or upgrading Firebird. Starting with Firebird 2.1
|
||||
(using InnoSetup 5 to build the installation package) it is now
|
||||
possible to pass the /clean option to remove these files.
|
||||
|
||||
Uninstaller Exit Codes
|
||||
----------------------
|
||||
|
||||
Beginning with Inno Setup 4.0.8, the uninstaller will return a non-zero exit
|
||||
code if the user cancels or a fatal error is encountered. Programs checking the
|
||||
exit code to detect failure should not check for a specific non-zero value; any
|
||||
non-zero exit code indicates that the uninstaller was not run to completion.
|
||||
The uninstaller will return a non-zero exit code if the user cancels or
|
||||
a fatal error is encountered. Programs checking the exit code to detect
|
||||
failure should not check for a specific non-zero value; any non-zero
|
||||
exit code indicates that the uninstaller was not run to completion.
|
||||
|
||||
Note that at the moment you get an exit code back from the uninstaller, some
|
||||
code related to uninstallation might still be running. Because Windows doesn't
|
||||
allow programs to delete their own EXEs, the uninstaller creates and spawns a
|
||||
copy of itself in the TEMP directory. This "clone" performs the actual
|
||||
uninstallation, and at the end, terminates the original uninstaller EXE (at
|
||||
which point you get an exit code back), deletes it, then displays the "uninstall
|
||||
complete" message box (if it hasn't been suppressed with /SILENT or
|
||||
/VERYSILENT).
|
||||
Note that at the moment you get an exit code back from the uninstaller,
|
||||
some code related to uninstallation might still be running. Because
|
||||
Windows doesn't allow programs to delete their own EXEs, the uninstaller
|
||||
creates and spawns a copy of itself in the TEMP directory. This "clone"
|
||||
performs the actual uninstallation, and at the end, terminates the
|
||||
original uninstaller EXE (at which point you get an exit code back),
|
||||
deletes it, then displays the "uninstall complete" message box (if it
|
||||
hasn't been suppressed with /SILENT or /VERYSILENT).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user