Introduce 64bit builds and 32/64 bit mixed installer

This commit is contained in:
Ansgar Becker
2013-11-13 05:38:44 +00:00
parent 992ac90012
commit 59dbff06a2
18 changed files with 204 additions and 116 deletions

View File

@ -37,6 +37,7 @@ OutputDir={#OutDir}
OutputBaseFilename={#ProgName}_{#ProgShortVersion}_Setup OutputBaseFilename={#ProgName}_{#ProgShortVersion}_Setup
UninstallDisplayIcon={app}\{#ProgExeName} UninstallDisplayIcon={app}\{#ProgExeName}
SetupIconFile={#ResourceDir}mainicon.ico SetupIconFile={#ResourceDir}mainicon.ico
ArchitecturesInstallIn64BitMode=x64
UsePreviousAppDir=yes UsePreviousAppDir=yes
DirExistsWarning=auto DirExistsWarning=auto
PrivilegesRequired=none PrivilegesRequired=none
@ -60,12 +61,15 @@ Type: files; Name: "{app}\donate.url"
Type: files; Name: "{app}\function.txt" Type: files; Name: "{app}\function.txt"
[Files] [Files]
Source: "{#ProgExeName}"; DestDir: "{app}"; Flags: ignoreversion Source: "{#ProgNameLower}64.exe"; DestDir: "{app}"; DestName: "{#ProgExeName}"; Check: Is64BitInstallMode; Flags: ignoreversion
Source: "{#ProgNameLower}32.exe"; DestDir: "{app}"; DestName: "{#ProgExeName}"; Check: not Is64BitInstallMode; Flags: ignoreversion
Source: "readme.txt"; DestDir: "{app}"; Flags: ignoreversion isreadme Source: "readme.txt"; DestDir: "{app}"; Flags: ignoreversion isreadme
Source: "license.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "license.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "gpl.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "gpl.txt"; DestDir: "{app}"; Flags: ignoreversion
Source: "libmysql.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "libmysql64.dll"; DestDir: "{app}"; DestName: "libmysql.dll"; Check: Is64BitInstallMode; Flags: ignoreversion
Source: "plugins\*.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion Source: "libmysql32.dll"; DestDir: "{app}"; DestName: "libmysql.dll"; Check: not Is64BitInstallMode; Flags: ignoreversion
Source: "plugins64\*.dll"; DestDir: "{app}\plugins"; Check: Is64BitInstallMode; Flags: ignoreversion
Source: "plugins32\*.dll"; DestDir: "{app}\plugins"; Check: not Is64BitInstallMode; Flags: ignoreversion
Source: "Snippets\*.sql"; DestDir: "{commonappdata}\{#ProgName}\Snippets"; Source: "Snippets\*.sql"; DestDir: "{commonappdata}\{#ProgName}\Snippets";
[Icons] [Icons]

BIN
out/libmysql64.dll Normal file

Binary file not shown.

BIN
out/plugins64/dialog.dll Normal file

Binary file not shown.

View File

@ -1 +0,0 @@
1 24 "manifest.xml"

1
res/manifest32.rc Normal file
View File

@ -0,0 +1 @@
1 24 "manifest32.xml"

1
res/manifest64.rc Normal file
View File

@ -0,0 +1 @@
1 24 "manifest64.xml"

15
res/manifest64.xml Normal file
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="0.0.0.0"
processorArchitecture="amd64"
name="HeidiSQL"
type="win32" />
<description>A lightweight, fast and flexible interface to MySQL</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="amd64" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>

View File

@ -1,110 +1,137 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<ProjectGuid>{24E2AAD6-CDE7-46EC-95BD-79028373B17A}</ProjectGuid> <ProjectGuid>{24E2AAD6-CDE7-46EC-95BD-79028373B17A}</ProjectGuid>
<ProjectVersion>12.0</ProjectVersion> <ProjectVersion>15.1</ProjectVersion>
<MainSource>updater.dpr</MainSource> <MainSource>updater.dpr</MainSource>
<Config Condition="'$(Config)'==''">Debug</Config> <Config Condition="'$(Config)'==''">Debug</Config>
<DCC_DCCCompiler>DCC32</DCC_DCCCompiler> <DCC_DCCCompiler>DCC32</DCC_DCCCompiler>
</PropertyGroup> <Base>True</Base>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''"> <AppType>Console</AppType>
<Base>true</Base> <FrameworkType>None</FrameworkType>
</PropertyGroup> <Platform Condition="'$(Platform)'==''">Win64</Platform>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''"> <TargetedPlatforms>3</TargetedPlatforms>
<Cfg_1>true</Cfg_1> </PropertyGroup>
<CfgParent>Base</CfgParent> <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base> <Base>true</Base>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''"> <PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Cfg_2>true</Cfg_2> <Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent> <CfgParent>Base</CfgParent>
<Base>true</Base> <Base>true</Base>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''"> <PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<DCC_ExeOutput>..\</DCC_ExeOutput> <Base_Win64>true</Base_Win64>
<DCC_UsePackage>vcl;rtl;vclx;vclimg;vclactnband;dbrtl;vcldb;vcldbx;bdertl;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;websnap;webdsnap;inetdb;inetdbbde;inetdbxpress;soaprtl;vclribbon;dbexpress;DbxCommonDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;DbxClientDriver;DataSnapServer;DBXInterBaseDriver;DBXMySQLDriver;dbxcds;DBXFirebirdDriver;DBXSybaseASEDriver;DBXSybaseASADriver;DBXOracleDriver;DBXMSSQLDriver;DBXInformixDriver;DBXDb2Driver;madBasic_;madDisAsm_;madExcept_;SynEditR;VirtualTreesR</DCC_UsePackage> <CfgParent>Base</CfgParent>
<DCC_DependencyCheckOutputName>..\updater.exe</DCC_DependencyCheckOutputName> <Base>true</Base>
<DCC_ImageBase>00400000</DCC_ImageBase> </PropertyGroup>
<DCC_UnitAlias>WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias)</DCC_UnitAlias> <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
<DCC_Platform>x86</DCC_Platform> <Cfg_1>true</Cfg_1>
<DCC_N>false</DCC_N> <CfgParent>Base</CfgParent>
<DCC_S>false</DCC_S> <Base>true</Base>
<DCC_K>false</DCC_K> </PropertyGroup>
<DCC_E>false</DCC_E> <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
<DCC_F>false</DCC_F> <Cfg_2>true</Cfg_2>
</PropertyGroup> <CfgParent>Base</CfgParent>
<PropertyGroup Condition="'$(Cfg_1)'!=''"> <Base>true</Base>
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols> </PropertyGroup>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define> <PropertyGroup Condition="'$(Base)'!=''">
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo> <VerInfo_Locale>1031</VerInfo_Locale>
<DCC_DebugInformation>false</DCC_DebugInformation> <VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup> <DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Winapi;$(DCC_Namespace)</DCC_Namespace>
<PropertyGroup Condition="'$(Cfg_2)'!=''"> <DCC_ExeOutput>..\</DCC_ExeOutput>
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define> <DCC_UsePackage>vcl;rtl;vclx;vclimg;vclactnband;dbrtl;vcldb;vcldbx;bdertl;vcltouch;xmlrtl;dsnap;dsnapcon;TeeUI;TeeDB;Tee;vclib;ibxpress;adortl;IndyCore;IndySystem;IndyProtocols;inet;intrawebdb_100_140;Intraweb_100_140;VclSmp;vclie;websnap;webdsnap;inetdb;inetdbbde;inetdbxpress;soaprtl;vclribbon;dbexpress;DbxCommonDriver;DataSnapIndy10ServerTransport;DataSnapProviderClient;DbxClientDriver;DataSnapServer;DBXInterBaseDriver;DBXMySQLDriver;dbxcds;DBXFirebirdDriver;DBXSybaseASEDriver;DBXSybaseASADriver;DBXOracleDriver;DBXMSSQLDriver;DBXInformixDriver;DBXDb2Driver;madBasic_;madDisAsm_;madExcept_;SynEditR;VirtualTreesR;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup> <DCC_DependencyCheckOutputName>..\updater.exe</DCC_DependencyCheckOutputName>
<ItemGroup> <DCC_ImageBase>00400000</DCC_ImageBase>
<DelphiCompile Include="updater.dpr"> <DCC_Platform>x86</DCC_Platform>
<MainSource>MainSource</MainSource> <DCC_N>false</DCC_N>
</DelphiCompile> <DCC_S>false</DCC_S>
<BuildConfiguration Include="Base"> <DCC_K>false</DCC_K>
<Key>Base</Key> <DCC_E>false</DCC_E>
</BuildConfiguration> <DCC_F>false</DCC_F>
<BuildConfiguration Include="Debug"> </PropertyGroup>
<Key>Cfg_2</Key> <PropertyGroup Condition="'$(Base_Win32)'!=''">
<CfgParent>Base</CfgParent> <DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
</BuildConfiguration> <VerInfo_Locale>1033</VerInfo_Locale>
<BuildConfiguration Include="Release"> </PropertyGroup>
<Key>Cfg_1</Key> <PropertyGroup Condition="'$(Base_Win64)'!=''">
<CfgParent>Base</CfgParent> <DCC_Namespace>System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
</BuildConfiguration> <VerInfo_Locale>1033</VerInfo_Locale>
</ItemGroup> </PropertyGroup>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/> <PropertyGroup Condition="'$(Cfg_1)'!=''">
<ProjectExtensions> <DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<Borland.Personality>Delphi.Personality.12</Borland.Personality> <DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<Borland.ProjectType/> <DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<BorlandProject> <DCC_DebugInformation>0</DCC_DebugInformation>
<Delphi.Personality> </PropertyGroup>
<Source> <PropertyGroup Condition="'$(Cfg_2)'!=''">
<Source Name="MainSource">updater.dpr</Source> <DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
</Source> </PropertyGroup>
<Parameters> <ItemGroup>
<Parameters Name="UseLauncher">False</Parameters> <DelphiCompile Include="$(MainSource)">
<Parameters Name="LoadAllSymbols">True</Parameters> <MainSource>MainSource</MainSource>
<Parameters Name="LoadUnspecifiedSymbols">False</Parameters> </DelphiCompile>
</Parameters> <BuildConfiguration Include="Debug">
<VersionInfo> <Key>Cfg_2</Key>
<VersionInfo Name="IncludeVerInfo">False</VersionInfo> <CfgParent>Base</CfgParent>
<VersionInfo Name="AutoIncBuild">False</VersionInfo> </BuildConfiguration>
<VersionInfo Name="MajorVer">1</VersionInfo> <BuildConfiguration Include="Base">
<VersionInfo Name="MinorVer">0</VersionInfo> <Key>Base</Key>
<VersionInfo Name="Release">0</VersionInfo> </BuildConfiguration>
<VersionInfo Name="Build">0</VersionInfo> <BuildConfiguration Include="Release">
<VersionInfo Name="Debug">False</VersionInfo> <Key>Cfg_1</Key>
<VersionInfo Name="PreRelease">False</VersionInfo> <CfgParent>Base</CfgParent>
<VersionInfo Name="Special">False</VersionInfo> </BuildConfiguration>
<VersionInfo Name="Private">False</VersionInfo> </ItemGroup>
<VersionInfo Name="DLL">False</VersionInfo> <Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
<VersionInfo Name="Locale">1031</VersionInfo> <ProjectExtensions>
<VersionInfo Name="CodePage">1252</VersionInfo> <Borland.Personality>Delphi.Personality.12</Borland.Personality>
</VersionInfo> <Borland.ProjectType/>
<VersionInfoKeys> <BorlandProject>
<VersionInfoKeys Name="CompanyName"/> <Delphi.Personality>
<VersionInfoKeys Name="FileDescription"/> <Source>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys> <Source Name="MainSource">updater.dpr</Source>
<VersionInfoKeys Name="InternalName"/> </Source>
<VersionInfoKeys Name="LegalCopyright"/> <Parameters/>
<VersionInfoKeys Name="LegalTrademarks"/> <VersionInfo>
<VersionInfoKeys Name="OriginalFilename"/> <VersionInfo Name="IncludeVerInfo">False</VersionInfo>
<VersionInfoKeys Name="ProductName"/> <VersionInfo Name="AutoIncBuild">False</VersionInfo>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys> <VersionInfo Name="MajorVer">1</VersionInfo>
<VersionInfoKeys Name="Comments"/> <VersionInfo Name="MinorVer">0</VersionInfo>
</VersionInfoKeys> <VersionInfo Name="Release">0</VersionInfo>
<Excluded_Packages> <VersionInfo Name="Build">0</VersionInfo>
<Excluded_Packages Name="D:\heidisql\trunk\components\pngcomponents\build\PngComponentsD.bpl">File D:\heidisql\trunk\components\pngcomponents\build\PngComponentsD.bpl not found</Excluded_Packages> <VersionInfo Name="Debug">False</VersionInfo>
<Excluded_Packages Name="$(BDS)\bin\dcloffice2k140.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages> <VersionInfo Name="PreRelease">False</VersionInfo>
<Excluded_Packages Name="$(BDS)\bin\dclofficexp140.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages> <VersionInfo Name="Special">False</VersionInfo>
</Excluded_Packages> <VersionInfo Name="Private">False</VersionInfo>
</Delphi.Personality> <VersionInfo Name="DLL">False</VersionInfo>
</BorlandProject> <VersionInfo Name="Locale">1031</VersionInfo>
<ProjectFileVersion>12</ProjectFileVersion> <VersionInfo Name="CodePage">1252</VersionInfo>
</ProjectExtensions> </VersionInfo>
</Project> <VersionInfoKeys>
<VersionInfoKeys Name="CompanyName"/>
<VersionInfoKeys Name="FileDescription"/>
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="InternalName"/>
<VersionInfoKeys Name="LegalCopyright"/>
<VersionInfoKeys Name="LegalTrademarks"/>
<VersionInfoKeys Name="OriginalFilename"/>
<VersionInfoKeys Name="ProductName"/>
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
<VersionInfoKeys Name="Comments"/>
</VersionInfoKeys>
<Excluded_Packages>
<Excluded_Packages Name="D:\heidisql\trunk\components\pngcomponents\build\PngComponentsD.bpl">File D:\heidisql\trunk\components\pngcomponents\build\PngComponentsD.bpl not found</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k140.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp140.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Platforms>
<Platform value="OSX32">False</Platform>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>

BIN
res/updater64.exe Normal file

Binary file not shown.

1
res/updater64.rc Normal file
View File

@ -0,0 +1 @@
updater exe "updater.exe"

View File

@ -7,7 +7,7 @@
BEGIN BEGIN
BLOCK "040904E4" BLOCK "040904E4"
BEGIN BEGIN
VALUE "FileDescription", "%APPNAME% %APPVER% 32 Bit\000" VALUE "FileDescription", "%APPNAME% %APPVER%\000"
VALUE "ProductName", "%APPNAME%\000" VALUE "ProductName", "%APPNAME%\000"
VALUE "LegalCopyright", "See GPL license\000" VALUE "LegalCopyright", "See GPL license\000"
END END

View File

@ -320,6 +320,7 @@ type
function GetOutputFilenamePlaceholders: TStringList; function GetOutputFilenamePlaceholders: TStringList;
function GetSystemImageList: TImageList; function GetSystemImageList: TImageList;
function GetSystemImageIndex(Filename: String): Integer; function GetSystemImageIndex(Filename: String): Integer;
function GetExecutableBits: Byte;
var var
@ -2631,6 +2632,45 @@ begin
end; end;
function GetExecutableBits: Byte;
const
kb32 = 1024 * 32;
var
ExeFilename: String;
Buffer: Array[0..kb32-1] of Byte; // warning: assuming both headers are in there!
hFile: DWord;
bRead: DWord;
bToRead: DWord;
pDos: PImageDosHeader;
pNt: PImageNtHeaders;
begin
Result := 32;
ExeFilename := ParamStr(0);
hFile := CreateFile(pChar(ExeFilename), GENERIC_READ, FILE_SHARE_READ, NIL, OPEN_EXISTING, 0, 0);
if hFile <> INVALID_HANDLE_VALUE then try
bToRead := GetFileSize(hFile, NIL);
if bToRead > kb32 then
bToRead := kb32;
if not ReadFile(hFile, Buffer, bToRead, bRead, NIL) then
Exit;
if bRead = bToRead then begin
pDos := @Buffer[0];
if pDos.e_magic = IMAGE_DOS_SIGNATURE then begin
pNt := PImageNtHeaders(LongInt(pDos) + pDos._lfanew);
if pNt.Signature = IMAGE_NT_SIGNATURE then begin
if pNt.FileHeader.Machine and IMAGE_FILE_32BIT_MACHINE > 0 then
Result := 32
else
Result := 64
end;
end;
end;
finally
CloseHandle(hFile);
end;
end;

View File

@ -117,7 +117,7 @@ begin
// Prepare download // Prepare download
CheckfileDownload := THttpDownload.Create(Self); CheckfileDownload := THttpDownload.Create(Self);
CheckfileDownload.TimeOut := 5; CheckfileDownload.TimeOut := 5;
CheckfileDownload.URL := APPDOMAIN+'updatecheck.php?r='+IntToStr(Mainform.AppVerRevision)+'&t='+DateTimeToStr(Now); CheckfileDownload.URL := APPDOMAIN+'updatecheck.php?r='+IntToStr(Mainform.AppVerRevision)+'&bits='+IntToStr(GetExecutableBits)+'&t='+DateTimeToStr(Now);
CheckFilename := GetTempDir + APPNAME + '_updatecheck.ini'; CheckFilename := GetTempDir + APPNAME + '_updatecheck.ini';
// Download the check file // Download the check file