I am using Inno Setup located here http://www.jrsoftware.org/
I also use the Modular InnoSetup Dependency Installer located here http://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup
I have a project that needs a Visual C ++ redistributable package for Visual Studio 2013 located here. http://www.microsoft.com/en-us/download/details.aspx?id=40784
I am trying to modify a product file from the Modular Inno Seup Dependency installer. I copied and changed the file from vcredist2010.iss to vcredist2013.iss, but the problem is that every time it installs it, it reloads the C ++ 2013 runtime. I don't think it detects the installation, so it reinstalls everytime.
Here is the code I have now.
// requires Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2008 R2 SP1, Windows Server 2008 Service Pack 2, Windows Server 2012, Windows Server 2012 R2, Windows Vista Service Pack 2, Windows XP Service Pack 3 // requires Windows Installer 3.1 or later (??) // requires Internet Explorer 5.01 or later (??) // http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992 [CustomMessages] vcredist2013_title=Visual C++ 2013 Redistributable en.vcredist2013_size=6.2 MB de.vcredist2013_size=6,2 MB en.vcredist2013_size_x64=6.9 MB de.vcredist2013_size_x64=6,9 MB ;http://www.microsoft.com/globaldev/reference/lcid-all.mspx en.vcredist2013_lcid='' de.vcredist2013_lcid='/lcid 1031 ' [Code] const vcredist2013_url = 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe'; vcredist2013_url_x64 = 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe'; procedure vcredist2013(); var version: cardinal; begin RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\12.0\VC\VCRedist\' + GetString('x86', 'x64',''), 'Installed', version); if (version <> 1) then AddProduct('vcredist2013' + GetArchitectureString() + '.exe', CustomMessage('vcredist2013_lcid') + '/passive /norestart', CustomMessage('vcredist2013_title'), CustomMessage('vcredist2013_size' + GetArchitectureString()), GetString(vcredist2013_url, vcredist2013_url_x64,''),false, false); end;
Is there anyone better way to do this?
Thanks.
Update
Here is the latest version.
// requires Windows 7 Service Pack 1, Windows 8, Windows 8.1, Windows Server 2003, Windows Server 2008 R2 SP1, Windows Server 2008 Service Pack 2, Windows Server 2012, Windows Server 2012 R2, Windows Vista Service Pack 2, Windows XP Service Pack 3 // requires Windows Installer 3.1 or later (??) // requires Internet Explorer 5.01 or later (??) // http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992 // Thank you (Martyn) https://allthingsconfigmgr.wordpress.com/2013/12/17/visual-c-redistributables-made-simple/ // http://stackoverflow.com/questions/27582762/inno-setup-for-visual-c-redistributable-package-for-visual-studio-2013 // http://stackoverflow.com/questions/11137424/how-to-make-vcredist-x86-reinstall-only-if-not-yet-installed [CustomMessages] vcredist2013_title=Visual C++ 2013 Redistribute (32bit) vcredist2013_title_x64=Visual C++ 2013 Redistribute (64bit) en.vcredist2013_size=6.2 MB de.vcredist2013_size=6,2 MB en.vcredist2013_size_x64=6.9 MB de.vcredist2013_size_x64=6,9 MB ;http://www.microsoft.com/globaldev/reference/lcid-all.mspx en.vcredist2013_lcid='' de.vcredist2013_lcid='/lcid 1031 ' [Code] #IFDEF UNICODE #DEFINE AW "W" #ELSE #DEFINE AW "A" #ENDIF type INSTALLSTATE = Longint; const INSTALLSTATE_INVALIDARG = -2; // An invalid parameter was passed to the function. INSTALLSTATE_UNKNOWN = -1; // The product is neither advertised or installed. INSTALLSTATE_ADVERTISED = 1; // The product is advertised but not installed. INSTALLSTATE_ABSENT = 2; // The product is installed for a different user. INSTALLSTATE_DEFAULT = 5; // The product is installed for the current user. //DOWNLOADS FOR VISUAL C++ 2013 VC_REDIST2013_URL = 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x86.exe'; VC_REDIST2013_URL_x64 = 'http://download.microsoft.com/download/2/E/6/2E61CFA4-993B-4DD4-91DA-3737CD5CD6E3/vcredist_x64.exe'; //OPTIONS VC_2013_REDIST = '{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}'; //Microsoft.VS.VC_RuntimeMinimumVSU_x86,v12 VC_2013_REDIST_x64 = '{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}'; //Microsoft.VS.VC_RuntimeMinimumVSU_amd64,v12 function MsiQueryProductState(szProduct: String): INSTALLSTATE; external 'MsiQueryProductState{#AW}@msi.dll stdcall'; function VCVersionInstalled(const ProductID: String): Boolean; begin Result := MsiQueryProductState(ProductID) = INSTALLSTATE_DEFAULT; end; procedure vcredist2013(); var target_x86_Only: Boolean; target_x64_Only: Boolean; target_x64x86_Either: Boolean; begin //OPTION SETTINGS ONE TRUE ONLY target_x86_Only := True; target_x64_Only := False; target_x64x86_Either := False; //END OPTION SETTINGS //Will Install 32 bit only. if (target_x86_only = True) then begin if NOT VCVersionInstalled(VC_2013_REDIST) then AddProduct('vcredist_x86.exe', CustomMessage('vcredist2013_lcid') + '/install /quiet /norestart', CustomMessage('vcredist2013_title'), CustomMessage('vcredist2013_size'), VC_REDIST2013_URL, false, false); end; //Will attempt to install 64 bit only if (target_x64_Only) then begin if (IsX64) then begin if NOT VCVersionInstalled(VC_2013_REDIST_x64) then AddProduct('vcredist_x64.exe', CustomMessage('vcredist2013_lcid') + '/install /quiet /norestart', CustomMessage('vcredist2013_title_x64'), CustomMessage('vcredist2013_size_x64'), VC_REDIST2013_URL_x64, false, false); end else begin MsgBox('Sorry Cant install x64 application on x86 machine.', mbInformation, MB_OK); end; end; //Will attempt to install x64 and if it not available it will install the x86 version if (target_x64x86_Either) then begin if (IsX64) then begin if NOT VCVersionInstalled(VC_2013_REDIST_x64) then AddProduct('vcredist_x64.exe', CustomMessage('vcredist2013_lcid') + '/install /quiet /norestart', CustomMessage('vcredist2013_title_x64'), CustomMessage('vcredist2013_size_x64'), VC_REDIST2013_URL_x64, false, false); end else begin if NOT VCVersionInstalled(VC_2013_REDIST) then AddProduct('vcredist_x86.exe', CustomMessage('vcredist2013_lcid') + '/install /quiet /norestart', CustomMessage('vcredist2013_title'), CustomMessage('vcredist2013_size'), VC_REDIST2013_URL, false, false); end; end; end;