Skip to content

Instantly share code, notes, and snippets.

@foobit
Last active January 2, 2016 11:08
Show Gist options
  • Select an option

  • Save foobit/8294153 to your computer and use it in GitHub Desktop.

Select an option

Save foobit/8294153 to your computer and use it in GitHub Desktop.

Revisions

  1. foobit revised this gist May 21, 2014. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions vsredist.iss
    Original file line number Diff line number Diff line change
    @@ -51,6 +51,7 @@ const
    VC_2010_SP1_REDIST_IA64 = '{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}';
    VC_2013_REDIST_X86 = '{CE085A78-074E-4823-8DC1-8A721B94B76D}'; // 12.0.21005
    VC_2013_REDIST_X64 = '{7F51BDB9-EE21-49EE-94D6-90AFC321780E}';
    function MsiQueryProductState(szProduct: string): INSTALLSTATE;
    external 'MsiQueryProductState{#AW}@msi.dll stdcall';
  2. foobit revised this gist May 21, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion vsredist.iss
    Original file line number Diff line number Diff line change
    @@ -67,5 +67,5 @@ begin
    // this statement, the following won't install your VC redist only when
    // the Visual C++ 2010 Redist (x86) and Visual C++ 2010 SP1 Redist(x86)
    // are installed for the current user
    Result := not (VCVersionInstalled(VC_2013_REDIST_X86);
    Result := not (VCVersionInstalled(VC_2013_REDIST_X86));
    end;
  3. foobit created this gist Jan 7, 2014.
    71 changes: 71 additions & 0 deletions vsredist.iss
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,71 @@
    [Setup]

    [Run]
    ; add the Parameters, WorkingDir and StatusMsg as you wish, just keep here
    ; the conditional installation Check
    Filename: "{tmp}\vcredist_x86.exe"; Check: VCRedistNeedsInstall

    [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.
    VC_2005_REDIST_X86 = '{A49F249F-0C91-497F-86DF-B2585E8E76B7}';
    VC_2005_REDIST_X64 = '{6E8E85E8-CE4B-4FF5-91F7-04999C9FAE6A}';
    VC_2005_REDIST_IA64 = '{03ED71EA-F531-4927-AABD-1C31BCE8E187}';
    VC_2005_SP1_REDIST_X86 = '{7299052B-02A4-4627-81F2-1818DA5D550D}';
    VC_2005_SP1_REDIST_X64 = '{071C9B48-7C32-4621-A0AC-3F809523288F}';
    VC_2005_SP1_REDIST_IA64 = '{0F8FB34E-675E-42ED-850B-29D98C2ECE08}';
    VC_2005_SP1_ATL_SEC_UPD_REDIST_X86 = '{837B34E3-7C30-493C-8F6A-2B0F04E2912C}';
    VC_2005_SP1_ATL_SEC_UPD_REDIST_X64 = '{6CE5BAE9-D3CA-4B99-891A-1DC6C118A5FC}';
    VC_2005_SP1_ATL_SEC_UPD_REDIST_IA64 = '{85025851-A784-46D8-950D-05CB3CA43A13}';
    VC_2008_REDIST_X86 = '{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}';
    VC_2008_REDIST_X64 = '{350AA351-21FA-3270-8B7A-835434E766AD}';
    VC_2008_REDIST_IA64 = '{2B547B43-DB50-3139-9EBE-37D419E0F5FA}';
    VC_2008_SP1_REDIST_X86 = '{9A25302D-30C0-39D9-BD6F-21E6EC160475}';
    VC_2008_SP1_REDIST_X64 = '{8220EEFE-38CD-377E-8595-13398D740ACE}';
    VC_2008_SP1_REDIST_IA64 = '{5827ECE1-AEB0-328E-B813-6FC68622C1F9}';
    VC_2008_SP1_ATL_SEC_UPD_REDIST_X86 = '{1F1C2DFC-2D24-3E06-BCB8-725134ADF989}';
    VC_2008_SP1_ATL_SEC_UPD_REDIST_X64 = '{4B6C7001-C7D6-3710-913E-5BC23FCE91E6}';
    VC_2008_SP1_ATL_SEC_UPD_REDIST_IA64 = '{977AD349-C2A8-39DD-9273-285C08987C7B}';
    VC_2008_SP1_MFC_SEC_UPD_REDIST_X86 = '{9BE518E6-ECC6-35A9-88E4-87755C07200F}';
    VC_2008_SP1_MFC_SEC_UPD_REDIST_X64 = '{5FCE6D76-F5DC-37AB-B2B8-22AB8CEDB1D4}';
    VC_2008_SP1_MFC_SEC_UPD_REDIST_IA64 = '{515643D1-4E9E-342F-A75A-D1F16448DC04}';
    VC_2010_REDIST_X86 = '{196BB40D-1578-3D01-B289-BEFC77A11A1E}';
    VC_2010_REDIST_X64 = '{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}';
    VC_2010_REDIST_IA64 = '{C1A35166-4301-38E9-BA67-02823AD72A1B}';
    VC_2010_SP1_REDIST_X86 = '{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}';
    VC_2010_SP1_REDIST_X64 = '{1D8E6291-B0D5-35EC-8441-6616F567A0F7}';
    VC_2010_SP1_REDIST_IA64 = '{88C73C1C-2DE5-3B01-AFB8-B46EF4AB41CD}';
    VC_2013_REDIST_X86 = '{CE085A78-074E-4823-8DC1-8A721B94B76D}'; // 12.0.21005
    function MsiQueryProductState(szProduct: string): INSTALLSTATE;
    external 'MsiQueryProductState{#AW}@msi.dll stdcall';
    function VCVersionInstalled(const ProductID: string): Boolean;
    begin
    Result := MsiQueryProductState(ProductID) = INSTALLSTATE_DEFAULT;
    end;
    function VCRedistNeedsInstall: Boolean;
    begin
    // here the Result must be True when you need to install your VCRedist
    // or False when you don't need to, so now it's upon you how you build
    // this statement, the following won't install your VC redist only when
    // the Visual C++ 2010 Redist (x86) and Visual C++ 2010 SP1 Redist(x86)
    // are installed for the current user
    Result := not (VCVersionInstalled(VC_2013_REDIST_X86);
    end;