Updated the installer script, which removes the need for Trackbar.dll.

This commit is contained in:
MascaraSnake 2016-01-01 13:02:42 +01:00
parent 346633da15
commit e595fa3b90
2 changed files with 118 additions and 44 deletions

Binary file not shown.

View file

@ -7,7 +7,7 @@ AppVerName=Zone Builder 0.1
AppPublisher=MascaraSnake AppPublisher=MascaraSnake
AppPublisherURL=http://mb.srb2.org/member.php?u=3131 AppPublisherURL=http://mb.srb2.org/member.php?u=3131
;AppSupportURL=http://forum.zdoom.org/viewtopic.php?f=3&t=32392 ;AppSupportURL=http://forum.zdoom.org/viewtopic.php?f=3&t=32392
;AppUpdatesURL=http://forum.zdoom.org/viewtopic.php?f=3&t=32392 ;AppUpdatesURL=http://devbuilds.drdteam.org/doombuilder2-gzdb/
DefaultDirName={pf}\Zone Builder DefaultDirName={pf}\Zone Builder
DefaultGroupName=Zone Builder DefaultGroupName=Zone Builder
AllowNoIcons=true AllowNoIcons=true
@ -23,7 +23,7 @@ PrivilegesRequired=admin
ShowLanguageDialog=no ShowLanguageDialog=no
LanguageDetectionMethod=none LanguageDetectionMethod=none
MinVersion=0,5.01.2600 MinVersion=0,5.01.2600
UninstallDisplayIcon={app}\Builder.exe UninstallDisplayIcon={app}\Updater.exe
WizardImageFile=..\Setup\WizModernImage-IS.bmp WizardImageFile=..\Setup\WizModernImage-IS.bmp
WizardSmallImageFile=..\Setup\WizModernSmallImage-IS.bmp WizardSmallImageFile=..\Setup\WizModernSmallImage-IS.bmp
@ -35,6 +35,8 @@ Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:Ad
[Files] [Files]
Source: Setup\dotnetfx35setup.exe; DestDir: {tmp}; Flags: dontcopy Source: Setup\dotnetfx35setup.exe; DestDir: {tmp}; Flags: dontcopy
Source: Setup\dxwebsetup.exe; DestDir: {tmp}; Flags: dontcopy
Source: Setup\vcredist_x86.exe; DestDir: {tmp}; Flags: dontcopy
Source: Builder.exe; DestDir: {app}; Flags: ignoreversion Source: Builder.exe; DestDir: {app}; Flags: ignoreversion
Source: ZoneBuilder.default.cfg; DestDir: {app}; Flags: ignoreversion Source: ZoneBuilder.default.cfg; DestDir: {app}; Flags: ignoreversion
Source: Updater.exe; DestDir: {app}; Flags: ignoreversion Source: Updater.exe; DestDir: {app}; Flags: ignoreversion
@ -43,7 +45,6 @@ Source: Refmanual.chm; DestDir: {app}; Flags: ignoreversion
Source: DevIL.dll; DestDir: {app}; Flags: ignoreversion Source: DevIL.dll; DestDir: {app}; Flags: ignoreversion
Source: SharpCompress.3.5.dll; DestDir: {app}; Flags: ignoreversion Source: SharpCompress.3.5.dll; DestDir: {app}; Flags: ignoreversion
Source: Scintilla.dll; DestDir: {app}; Flags: ignoreversion Source: Scintilla.dll; DestDir: {app}; Flags: ignoreversion
Source: Trackbar.dll; DestDir: {app}; Flags: ignoreversion
Source: SlimDX.dll; DestDir: {app}; Flags: ignoreversion Source: SlimDX.dll; DestDir: {app}; Flags: ignoreversion
Source: GPL.txt; DestDir: {app}; Flags: ignoreversion Source: GPL.txt; DestDir: {app}; Flags: ignoreversion
Source: Compilers\*; DestDir: {app}\Compilers; Flags: ignoreversion recursesubdirs Source: Compilers\*; DestDir: {app}\Compilers; Flags: ignoreversion recursesubdirs
@ -57,11 +58,13 @@ Source: Plugins\ColorPicker.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\CommentsPanel.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\CommentsPanel.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\NodesViewer.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\NodesViewer.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\SoundPropagationMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\SoundPropagationMode.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\StairSectorBuilder.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\TagExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\TagExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\TagRange.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\TagRange.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\VisplaneExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion Source: Plugins\VisplaneExplorer.dll; DestDir: {app}\Plugins; Flags: ignoreversion
Source: Plugins\Loadorder.cfg; DestDir: {app}\Plugins; Flags: ignoreversion onlyifdoesntexist Source: Plugins\Loadorder.cfg; DestDir: {app}\Plugins; Flags: ignoreversion onlyifdoesntexist
Source: Sprites\*; DestDir: {app}\Sprites; Flags: ignoreversion recursesubdirs Source: Sprites\*; DestDir: {app}\Sprites; Flags: ignoreversion recursesubdirs
Source: Textures\*; DestDir: {app}\Textures; Flags: ignoreversion
[Icons] [Icons]
Name: {group}\Zone Builder; Filename: {app}\Builder.exe Name: {group}\Zone Builder; Filename: {app}\Builder.exe
@ -87,14 +90,19 @@ var
page_info_net: TOutputMsgWizardPage; page_info_net: TOutputMsgWizardPage;
page_info_netfailed: TOutputMsgWizardPage; page_info_netfailed: TOutputMsgWizardPage;
page_setup_net: TOutputProgressWizardPage; page_setup_net: TOutputProgressWizardPage;
page_info_dx: TOutputMsgWizardPage; page_info_dx: TOutputMsgWizardPage;
page_info_dxfailed: TOutputMsgWizardPage; page_info_dxfailed: TOutputMsgWizardPage;
page_setup_dx: TOutputProgressWizardPage; page_setup_dx: TOutputProgressWizardPage;
page_info_vc: TOutputMsgWizardPage;
page_info_vcfailed: TOutputMsgWizardPage;
page_setup_vc: TOutputProgressWizardPage;
restartneeded: Boolean; restartneeded: Boolean;
netinstallfailed: Boolean; netinstallfailed: Boolean;
netisinstalled: Boolean; netisinstalled: Boolean;
dxinstallfailed: Boolean; dxinstallfailed: Boolean;
dxisinstalled: Boolean; dxisinstalled: Boolean;
vcinstallfailed: Boolean;
vcisinstalled: Boolean;
// Prerequisites checks // Prerequisites checks
function CheckNetIsInstalled(): Boolean; function CheckNetIsInstalled(): Boolean;
@ -105,26 +113,39 @@ end;
function CheckDXVersion(): Boolean; function CheckDXVersion(): Boolean;
var var
MajorVer, MinorVer: Integer; MajorVer, MinorVer: Integer;
StartPos: Integer; StartPos: Integer;
TempStr, VerStr: string; TempStr, VerStr: string;
HasRequiredDll : Boolean;
begin begin
if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\DirectX', 'Version', VerStr)) then begin if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\DirectX', 'Version', VerStr)) then begin
(* Extract major version *) (* Extract major version *)
StartPos := Pos('.', VerStr); StartPos := Pos('.', VerStr);
MajorVer := StrToInt(Copy(VerStr, 1, StartPos - 1)); MajorVer := StrToInt(Copy(VerStr, 1, StartPos - 1));
(* Remove major version and decimal point that follows *) (* Remove major version and decimal point that follows *)
TempStr := Copy(VerStr, StartPos + 1, MaxInt); TempStr := Copy(VerStr, StartPos + 1, MaxInt);
(* Find next decimal point *) (* Find next decimal point *)
StartPos := Pos('.', TempStr); StartPos := Pos('.', TempStr);
(* Extract minor version *) (* Extract minor version *)
MinorVer := StrToInt(Copy(TempStr, 1, StartPos - 1)); MinorVer := StrToInt(Copy(TempStr, 1, StartPos - 1));
Result := (MajorVer > 4) or ((MajorVer = 4) and (MinorVer >= 9)); //mxd. The DX version alone is not accurate enough...
end HasRequiredDll := FileExists(ExpandConstant('{syswow64}\d3dx9_43.dll'));
else begin
Result := false; Result := ((MajorVer > 4) or ((MajorVer = 4) and (MinorVer >= 9))) and HasRequiredDll;
end; end
else begin
Result := false;
end;
end;
function CheckVCIsInstalled(): Boolean;
begin
//mxd. Any VC++ 2008 package will do, I assume...
//mxd. Registry values gartered from http://blogs.msdn.com/b/astebner/archive/2009/01/29/9384143.aspx
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}') or
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9A25302D-30C0-39D9-BD6F-21E6EC160475}') or
RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}');
end; end;
// When the wizard initializes // When the wizard initializes
@ -133,10 +154,12 @@ begin
restartneeded := false; restartneeded := false;
netinstallfailed := false; netinstallfailed := false;
netisinstalled := CheckNetIsInstalled(); netisinstalled := CheckNetIsInstalled();
dxinstallfailed := false; dxinstallfailed := false;
dxisinstalled := CheckDXVersion(); dxisinstalled := CheckDXVersion();
vcinstallfailed := false;
vcisinstalled := CheckVCIsInstalled();
// Create .NET Framework pages // Create .NET Framework pages
page_info_net := CreateOutputMsgPage(wpPreparing, page_info_net := CreateOutputMsgPage(wpPreparing,
'Installing Microsoft .NET Framework 3.5', '', 'Installing Microsoft .NET Framework 3.5', '',
'Setup has detected that your system is missing the required version of the Microsoft .NET Framework. ' + 'Setup has detected that your system is missing the required version of the Microsoft .NET Framework. ' +
@ -150,10 +173,10 @@ begin
'Setup could not install the Microsoft .NET Framework 3.5.' + #10 + #10 + 'Setup could not install the Microsoft .NET Framework 3.5.' + #10 + #10 +
'Click Back to try again, or Cancel to exit Setup.'); 'Click Back to try again, or Cancel to exit Setup.');
page_setup_net := CreateOutputProgressPage('Installing Microsoft .NET Framework 3.5', 'Setup is installing Microsoft .NET Framework 3.5, please wait.....'); page_setup_net := CreateOutputProgressPage('Installing Microsoft .NET Framework 3.5', 'Setup is installing Microsoft .NET Framework 3.5, please wait...');
// Create DirectX pages // Create DirectX pages
page_info_dx := CreateOutputMsgPage(wpPreparing, page_info_dx := CreateOutputMsgPage(wpPreparing,
'Installing DirectX 9.0', '', 'Installing DirectX 9.0', '',
'Setup has detected that your system is missing the required version of the DirectX. ' + 'Setup has detected that your system is missing the required version of the DirectX. ' +
'Setup will now install or update your DirectX. This may take several minutes to complete.' + #10 + #10 + 'Setup will now install or update your DirectX. This may take several minutes to complete.' + #10 + #10 +
@ -166,7 +189,21 @@ begin
'Setup could not install DirectX 9.0.' + #10 + #10 + 'Setup could not install DirectX 9.0.' + #10 + #10 +
'Click Back to try again, or Cancel to exit Setup.'); 'Click Back to try again, or Cancel to exit Setup.');
page_setup_dx := CreateOutputProgressPage('Installing DirectX 9.0', 'Setup is installing DirectX 9.0, please wait.....'); page_setup_dx := CreateOutputProgressPage('Installing DirectX 9.0', 'Setup is installing DirectX 9.0, please wait...');
// Create VC++ 2008 pages
page_info_vc := CreateOutputMsgPage(wpPreparing,
'Installing Visual C++ 2008 SP1 ATL Security Update', '',
'Setup has detected that your system is missing the required version of the Visual C++ Runtime. ' +
'Setup will now install or update your Visual C++ Runtime. This may take several minutes to complete.' + #10 + #10 +
'Click Install to begin.');
page_info_vcfailed := CreateOutputMsgPage(page_info_net.ID,
'Installing Visual C++ 2008 SP1 ATL Security Update', '',
'Setup could not install Visual C++ 2008 SP1 ATL Security Update.' + #10 + #10 +
'Click Back to try again, or Cancel to exit Setup.');
page_setup_vc := CreateOutputProgressPage('Installing Visual C++ 2008 SP1 ATL Security Update', 'Setup is installing Visual C++ 2008 SP1 ATL Security Update, please wait...');
end; end;
// This is called to check if a page must be skipped // This is called to check if a page must be skipped
@ -176,10 +213,14 @@ begin
Result := netisinstalled Result := netisinstalled
else if(PageID = page_info_netfailed.ID) then else if(PageID = page_info_netfailed.ID) then
Result := (not netinstallfailed) and netisinstalled Result := (not netinstallfailed) and netisinstalled
else if(PageID = page_info_dx.ID) then // Skip DX pages? else if(PageID = page_info_dx.ID) then // Skip DX pages?
Result := dxisinstalled Result := dxisinstalled
else if(PageID = page_info_dxfailed.ID) then else if(PageID = page_info_dxfailed.ID) then
Result := (not dxinstallfailed) and dxisinstalled Result := (not dxinstallfailed) and dxisinstalled
else if(PageID = page_info_vc.ID) then // Skip VC++ pages?
Result := vcisinstalled
else if(PageID = page_info_vcfailed.ID) then
Result := (not vcinstallfailed) and vcisinstalled
else else
Result := false; Result := false;
end; end;
@ -194,13 +235,13 @@ end;
procedure CurPageChanged(CurPageID: Integer); procedure CurPageChanged(CurPageID: Integer);
begin begin
if(CurPageID = wpReady) then begin if(CurPageID = wpReady) then begin
if(netisinstalled = false) or (dxisinstalled = false) then if(netisinstalled = false) or (dxisinstalled = false) or (vcisinstalled = false) then
WizardForm.NextButton.Caption := 'Next'; WizardForm.NextButton.Caption := 'Next';
end end
else if(CurPageID = page_info_net.ID) or (CurPageID = page_info_dx.ID) then begin else if(CurPageID = page_info_net.ID) or (CurPageID = page_info_dx.ID) or (CurPageID = page_info_vc.ID) then begin
WizardForm.NextButton.Caption := 'Install'; WizardForm.NextButton.Caption := 'Install';
end end
else if(CurPageID = page_info_netfailed.ID) or (CurPageID = page_info_dxfailed.ID) then begin else if(CurPageID = page_info_netfailed.ID) or (CurPageID = page_info_dxfailed.ID) or (CurPageID = page_info_vcfailed.ID) then begin
WizardForm.NextButton.Visible := true; WizardForm.NextButton.Visible := true;
WizardForm.NextButton.Enabled := false; WizardForm.NextButton.Enabled := false;
WizardForm.BackButton.Visible := true; WizardForm.BackButton.Visible := true;
@ -245,10 +286,10 @@ begin
finally finally
page_setup_net.Hide; page_setup_net.Hide;
end; end;
end end
// Next pressed on DX info page? // Next pressed on DX info page?
else if(CurPage = page_info_dx.ID) then begin else if(CurPage = page_info_dx.ID) then begin
// Show progress page and run setup // Show progress page and run setup
page_setup_dx.Show; page_setup_dx.Show;
try try
begin begin
@ -259,7 +300,7 @@ begin
// See the return codes here: http://support.microsoft.com/kb/177430 // See the return codes here: http://support.microsoft.com/kb/177430
tempfile := RemoveBackslash(GetTempDir()) + '\dxwebsetup.exe'; tempfile := RemoveBackslash(GetTempDir()) + '\dxwebsetup.exe';
FileCopy(ExpandConstant('{tmp}\dxwebsetup.exe'), tempfile, false); FileCopy(ExpandConstant('{tmp}\dxwebsetup.exe'), tempfile, false);
Exec(tempfile, '/silent', '', SW_SHOW, ewWaitUntilTerminated, errorcode); Exec(tempfile, '/Q', '', SW_SHOW, ewWaitUntilTerminated, errorcode);
if(errorcode = 1) then begin if(errorcode = 1) then begin
// Success, but restart needed! // Success, but restart needed!
@ -274,6 +315,35 @@ begin
finally finally
page_setup_dx.Hide; page_setup_dx.Hide;
end; end;
end
// Next pressed on VC info page?
else if(CurPage = page_info_vc.ID) then begin
// Show progress page and run setup
page_setup_vc.Show;
try
begin
vcinstallfailed := false;
ExtractTemporaryFile('vcredist_x86.exe');
// We copy the file to the real temp directory so that it isn't removed when Setup is closed.
// Judging from the return codes, this installer may want to run again after a reboot.
// See the return codes here: http://blogs.msdn.com/b/astebner/archive/2010/10/20/10078468.aspx
tempfile := RemoveBackslash(GetTempDir()) + '\vcredist_x86.exe';
FileCopy(ExpandConstant('{tmp}\vcredist_x86.exe'), tempfile, false);
Exec(tempfile, '/q /norestart', '', SW_SHOW, ewWaitUntilTerminated, errorcode);
if(errorcode = 3010) then begin
// Success, but restart needed!
restartneeded := true;
end
else if(errorcode <> 0) then begin
vcinstallfailed := true;
end;
vcisinstalled := CheckVCIsInstalled();
end
finally
page_setup_vc.Hide;
end;
end; end;
Result := True; Result := True;
@ -282,10 +352,14 @@ end;
//Remove configs? //Remove configs?
procedure DeinitializeUninstall(); procedure DeinitializeUninstall();
begin begin
if MsgBox('Delete program configuration files?', mbConfirmation, MB_YESNO) = IDYES then if MsgBox('Delete map restore data and program configuration files?', mbConfirmation, MB_YESNO) = IDYES then
begin begin
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\ZoneBuilder.cfg')); // Remove restore data
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\ZoneBuilder.log')); DelTree(ExpandConstant('{localappdata}\Zone Builder\Restore'), True, True, True);
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\GZCrash.txt'));
end; // Remove configs
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\ZoneBuilder.cfg'));
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\ZoneBuilder.log'));
DeleteFile(ExpandConstant('{localappdata}\Zone Builder\GZCrash.txt'));
end;
end; end;