visual-studio-2013 - Visual Studio 2013的Visual C++ 可以再发行软件包的Inno安装程序

  显示原文与译文双语对照的内容

我正在使用Inno安装在这里 http://www.jrsoftware.org/

我还在这里使用模块InnoSetup依赖安装程序,位于 http://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup

我有一个项目需要 Visual Studio 2013的Visual C++ 可以再发行包。 http://www.microsoft.com/en-us/download/details.aspx?id=40784

我正在尝试从模块 Inno Seup依赖安装程序中修改一个产品文件。 我已经复制并修改了 vcredist2010.iss 到 vcredist2013.iss的文件,但问题是每次安装它时都会下载 C++ 2013运行时间。 我不认为它在检测安装所以每次都要重新安装。

这是我目前的代码。


//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, 'SOFTWAREMicrosoftVisualStudio12.0VCVCRedist' + 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;



谁有更好的方法来做这个?

谢谢。

更新

这是最新版本。


//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's 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;



时间: 原作者:

@TLama 感谢你对这里的所有帮助。

这是我最后的版本。。


//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's 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;



希望这对其他人有帮助。

原作者:
...