From 6e9845fd934114f3d1fb2eff60a667a6111a30e4 Mon Sep 17 00:00:00 2001 From: "Zane U. Ji" Date: Sun, 25 May 2014 21:22:48 +0800 Subject: [PATCH] Separated 32-bit and 64-bit installation packages --- src/xmlcopyeditor.iss | 60 ++++--------- src/xmlcopyeditor64.iss | 188 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 42 deletions(-) create mode 100644 src/xmlcopyeditor64.iss diff --git a/src/xmlcopyeditor.iss b/src/xmlcopyeditor.iss index 5449d7c..2ea5dff 100644 --- a/src/xmlcopyeditor.iss +++ b/src/xmlcopyeditor.iss @@ -1,5 +1,5 @@ ; -; Copyright 2012-2013 Zane U. Ji. +; Copyright 2012-2014 Zane U. Ji. ; ; This file is part of Xml Copy Editor. ; @@ -22,10 +22,8 @@ #define MyAppPublisher "Zane U. Ji" #define MyAppURL "https://sourceforge.net/projects/xml-copy-editor/" #define MyAppDir32 "ReleaseWx28-x86" -#define MyAppDir64 "ReleaseWx28-x64" #define MyAppExeName "xmlcopyeditor.exe" #define MinGW32 "D:\MinGW32" -#define MinGW64 "D:\MinGW64" [Setup] ; NOTE: The value of AppId uniquely identifies this application. @@ -43,20 +41,12 @@ DefaultDirName={code:DefDirRoot}\{#MyAppName} DefaultGroupName={#MyAppName} AllowNoIcons=yes LicenseFile=.\copying\xmlcopyeditor\copying.txt -OutputDir=.. -OutputBaseFilename=xmlcopyeditor-{#MyAppVersion}-install ;SetupIconFile=.\res\appicon.ico Compression=lzma SolidCompression=yes PrivilegesRequired=none -; "ArchitecturesInstallIn64BitMode=x64" requests that the install be -; done in "64-bit mode" on x64, meaning it should use the native -; 64-bit Program Files directory and the 64-bit view of the registry. -; On all other architectures it will install in "32-bit mode". -ArchitecturesInstallIn64BitMode=x64 -; Note: We don't set ProcessorsAllowed because we want this -; installation to run on all architectures (including Itanium, -; since it's capable of running 32-bit code too). +OutputDir=.. +OutputBaseFilename=xmlcopyeditor-{#MyAppVersion}-x86-install [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" @@ -101,35 +91,21 @@ Root: HKCR; Subkey: ".xlf"; ValueType: string; ValueData: "Software\SourceForge [Files] ; NOTE: Don't use "Flags: ignoreversion" on any shared system files -Source: ".\{#MyAppDir64}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion; Check: Is64BitInstallMode -Source: "{#MinGW64}\bin\libgcc_s_seh-1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\bin\libstdc++-6.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\bin\libwinpthread-1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libaspell-15.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libcurl-4.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libeay32.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libexpat-1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libiconv-2.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libpcre-1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libxml2-2.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libxslt-1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\ssleay32.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: "{#MinGW64}\x86_64-w64-mingw32\bin\zlib1.dll"; DestDir: "{app}"; Check: Is64BitInstallMode -Source: ".\{#MyAppDir32}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion; Check: not Is64BitInstallMode -Source: "{#MinGW32}\bin\libgcc_s_sjlj-1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\bin\libstdc++-6.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\bin\libwinpthread-1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libaspell-15.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libcurl-4.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libeay32.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libexpat-1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libiconv-2.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libpcre-1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libxml2-2.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\libxslt-1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\ssleay32.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW32}\i686-w64-mingw32\bin\zlib1.dll"; DestDir: "{app}"; Check: not Is64BitInstallMode -Source: "{#MinGW64}\bin\curl-ca-bundle.crt"; DestDir: "{app}"; Flags: ignoreversion +Source: ".\{#MyAppDir32}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#MinGW32}\bin\libgcc_s_sjlj-1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\bin\libstdc++-6.dll"; DestDir: "{app}" +Source: "{#MinGW32}\bin\libwinpthread-1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libaspell-15.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libcurl-4.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libeay32.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libexpat-1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libiconv-2.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libpcre-1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libxml2-2.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\libxslt-1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\ssleay32.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\zlib1.dll"; DestDir: "{app}" +Source: "{#MinGW32}\i686-w64-mingw32\bin\curl-ca-bundle.crt"; DestDir: "{app}"; Flags: ignoreversion Source: ".\aspell\*"; DestDir: "{app}\aspell"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\bin\*"; DestDir: "{app}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\catalog\*"; DestDir: "{app}\catalog"; Flags: ignoreversion recursesubdirs createallsubdirs diff --git a/src/xmlcopyeditor64.iss b/src/xmlcopyeditor64.iss new file mode 100644 index 0000000..6b5cc3d --- /dev/null +++ b/src/xmlcopyeditor64.iss @@ -0,0 +1,188 @@ +; +; Copyright 2014 Zane U. Ji. +; +; This file is part of Xml Copy Editor. +; +; Xml Copy Editor is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; version 2 of the License. +; +; Xml Copy Editor is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with Xml Copy Editor; if not, write to the Free Software +; Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +; + +#define MyAppName "XML Copy Editor" +#define MyAppVersion GetFileVersion(".\ReleaseWx28-x64\XmlCopyEditor.exe") +#define MyAppPublisher "Zane U. Ji" +#define MyAppURL "https://sourceforge.net/projects/xml-copy-editor/" +#define MyAppDir64 "ReleaseWx28-x64" +#define MyAppExeName "xmlcopyeditor.exe" +#define MinGW64 "D:\MinGW64" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={#MyAppName} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +;AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +DefaultDirName={code:DefDirRoot}\{#MyAppName} +DefaultGroupName={#MyAppName} +AllowNoIcons=yes +LicenseFile=.\copying\xmlcopyeditor\copying.txt +;SetupIconFile=.\res\appicon.ico +Compression=lzma +SolidCompression=yes +PrivilegesRequired=none +; "ArchitecturesInstallIn64BitMode=x64" requests that the install be +; done in "64-bit mode" on x64, meaning it should use the native +; 64-bit Program Files directory and the 64-bit view of the registry. +; On all other architectures it will install in "32-bit mode". +ArchitecturesInstallIn64BitMode=x64 +ArchitecturesAllowed=x64 +OutputDir=.. +OutputBaseFilename=xmlcopyeditor-{#MyAppVersion}-x64-install + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 +Name: "disable_registry"; Description: "Install without administrator privileges"; GroupDescription: "Other tasks"; Flags: unchecked exclusive +Name: "create_registry_entry"; Description: "Full desktop installation"; GroupDescription: "Other tasks"; Flags: exclusive; Check: IsAdmin +Name: "create_registry_entry\main"; Description: "Create Windows registry entry" +Name: "create_registry_entry\associate_xml"; Description: "Associate XML documents (*.xml)" +Name: "create_registry_entry\associate_dtd"; Description: "Associate DTDs (*.dtd)" +Name: "create_registry_entry\associate_ent"; Description: "Associate entity sets (*.ent)" +Name: "create_registry_entry\associate_rss"; Description: "Associate RSS (*.rss)" +Name: "create_registry_entry\associate_xsl"; Description: "Associate XSL stylesheets (*.xsl)" +Name: "create_registry_entry\associate_xsd"; Description: "Associate XML Schema definitions (*.xsd)" +Name: "create_registry_entry\associate_rng"; Description: "Associate RELEAX NG grammars (*.rng)" +Name: "create_registry_entry\associate_rnc"; Description: "Associate compact RELAX NG grammars (*.rnc)" +Name: "create_registry_entry\associate_lzx"; Description: "Associate OpenLaszlo (*.lzx)" +Name: "create_registry_entry\associate_xtm"; Description: "Associate XML Topic Maps (*.xtm, *xtmm)" +Name: "create_registry_entry\associate_xlf"; Description: "Associate XLIFF documents (*.xlf)" + +[Registry] +Root: HKCR; Subkey: "Software\SourceForge Project"; Flags: uninsdeletekeyifempty; Tasks: create_registry_entry +Root: HKCR; Subkey: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletekey; Tasks: create_registry_entry +Root: HKCR; Subkey: "Software\SourceForge Project\XML Copy Editor\DefaultIcon"; ValueType: string; ValueData: "{app}\{#MyAppExeName},1"; Tasks: create_registry_entry +Root: HKCR; Subkey: "Software\SourceForge Project\XML Copy Editor\shell\open\command"; ValueType: string; ValueData: """{app}\{#MyAppExeName}"" ""%1"""; Tasks: create_registry_entry +Root: HKLM; Subkey: "SOFTWARE\SourceForge Project"; Flags: uninsdeletekeyifempty; Tasks: create_registry_entry\main +Root: HKLM; Subkey: "SOFTWARE\SourceForge Project\XML Copy Editor"; Flags: uninsdeletekey; Tasks: create_registry_entry\main +Root: HKLM; Subkey: "SOFTWARE\SourceForge Project\XML Copy Editor"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"; Tasks: create_registry_entry\main +Root: HKCR; Subkey: ".xml"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_xml +Root: HKCR; Subkey: ".dtd"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_dtd +Root: HKCR; Subkey: ".ent"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_ent +Root: HKCR; Subkey: ".rss"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_rss +Root: HKCR; Subkey: ".xsl"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_xsl +Root: HKCR; Subkey: ".xsd"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_xsd +Root: HKCR; Subkey: ".rng"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_rng +Root: HKCR; Subkey: ".rnc"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_rnc +Root: HKCR; Subkey: ".lzx"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_lzx +Root: HKCR; Subkey: ".xtm"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_xtm +Root: HKCR; Subkey: ".xlf"; ValueType: string; ValueData: "Software\SourceForge Project\XML Copy Editor"; Flags: uninsdeletevalue; Tasks: create_registry_entry\associate_xlf + +[Files] +; NOTE: Don't use "Flags: ignoreversion" on any shared system files +Source: ".\{#MyAppDir64}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#MinGW64}\bin\libgcc_s_seh-1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\bin\libstdc++-6.dll"; DestDir: "{app}" +Source: "{#MinGW64}\bin\libwinpthread-1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libaspell-15.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libcurl-4.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libeay32.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libexpat-1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libiconv-2.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libpcre-1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libxml2-2.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\libxslt-1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\ssleay32.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\zlib1.dll"; DestDir: "{app}" +Source: "{#MinGW64}\x86_64-w64-mingw32\bin\curl-ca-bundle.crt"; DestDir: "{app}"; Flags: ignoreversion +Source: ".\aspell\*"; DestDir: "{app}\aspell"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\bin\*"; DestDir: "{app}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\catalog\*"; DestDir: "{app}\catalog"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\copying\*"; DestDir: "{app}\copying"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\dtd\*"; DestDir: "{app}\dtd"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\help\xmlcopyeditor.chm"; DestDir: "{app}\help"; Flags: recursesubdirs createallsubdirs +Source: ".\png\*png"; DestDir: "{app}\png"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\po\*.mo"; DestDir: "{app}\po"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\po\*.png"; DestDir: "{app}" +Source: ".\po\translate.txt"; DestDir: "{app}" +Source: ".\rng\*"; DestDir: "{app}\rng"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\rulesets\*"; DestDir: "{app}\rulesets"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\templates\*"; DestDir: "{app}\templates"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\xsl\*"; DestDir: "{app}\xsl"; Flags: ignoreversion recursesubdirs createallsubdirs + +[Icons] +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" +Name: "{group}\XML Copy Editor Help"; Filename: "{app}\help\xmlcopyeditor.chm" +Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; Check: IsAdmin +Name: "{userdesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon; Check: not IsAdmin +Name: "{commonappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: IsAdmin +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: not IsAdmin + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[Code] +function GetUninstallString(): String; +var + sUnInstPath: String; + sUnInstallString: String; +begin + sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1'); + sUnInstallString := ''; + if RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then + else if RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString) then + else if Is64BitInstallMode then begin + sUnInstPath := ExpandConstant('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1'); + if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then + RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString); + end; + Result := sUnInstallString; +end; + +// http://stackoverflow.com/questions/2000296/innosetup-how-to-automatically-uninstall-previous-installed-version +procedure CurStepChanged(CurStep: TSetupStep); +var + iResult: Integer; + sUninstall: String; +begin + if (CurStep = ssInstall) then begin + sUninstall := GetUninstallString(); + if sUninstall <> '' then begin + sUninstall := RemoveQuotes(sUnInstall); + //iResult := MsgBox('Warning: Old Version will be removed!', mbInformation, MB_OKCANCEL); + //if iResult = IDOK then + Exec(sUninstall, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_SHOWNORMAL, ewWaitUntilTerminated, iResult); + end; + end; +end; + +function IsAdmin(): Boolean; +begin + Result := IsAdminLoggedOn or IsPowerUserLoggedOn; +end; + +function DefDirRoot(Param: String): String; +begin + if not IsAdmin then + Result := ExpandConstant('{localappdata}') + else + Result := ExpandConstant('{pf}') +end; \ No newline at end of file