Ponieważ nie chcą powiedzieć, co minimalna wersja Visual C++ pakiet redystrybucyjny wymagać, tutaj masz przykładowy kod, z którego można zbudować to przez Twój własny. Proszę zauważyć, że nie mam pojęcia, jakie wersje są kompatybilne z tym, co i jakie niższe wersje muszą być zainstalowane, zatrzymam to na sobie.
Jedyne, co mogę powiedzieć, to że zdecydowanie powinieneś używać parametru warunkowego Check
, a rozwiązania próbujące zainstalować biblioteki szkieletowe lub uruchomieniowe podczas otwierania kreatora są błędne. Ten parametr warunkowy działa tak, jak przy powrocie do niego True, plik jest instalowany, jeśli False to jest pomijane. Musisz więc przywrócić True do VCRedistNeedsInstall
, jeśli chcesz zainstalować biblioteki uruchomieniowe, a jeśli nie, to False. Funkcja pomocnicza VCVersionInstalled
, która używa stałych rozpoczynających się od VC_
, zwraca tutaj wartość True, gdy pakiet jest zainstalowany, w przeciwnym wypadku Fałsz.
Jako źródło tego Użyłem następujących źródeł:
- How to detect the presence of the VC 8.0 runtime redistributable package
- How to detect the presence of the VC 9.0 runtime redistributable package
- How to detect the presence of the VC 2010 runtime redistributable package
Poniższy kod powinien być kompatybilny z wersjami Unicode i ANSI Inno Setup dzięki kobik's idea to use the conditional define.
Oto kod:
[Files]
Source: "vcredist_x86.exe"; DestDir: {tmp}; Flags: deleteafterinstall
[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}';
{ Microsoft Visual C++ 2012 x86 Minimum Runtime - 11.0.61030.0 (Update 4) }
VC_2012_REDIST_MIN_UPD4_X86 = '{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}';
VC_2012_REDIST_MIN_UPD4_X64 = '{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}';
{ Microsoft Visual C++ 2012 x86 Additional Runtime - 11.0.61030.0 (Update 4) }
VC_2012_REDIST_ADD_UPD4_X86 = '{B175520C-86A2-35A7-8619-86DC379688B9}';
VC_2012_REDIST_ADD_UPD4_X64 = '{37B8F9C7-03FB-3253-8781-2517C99D7C00}';
{ Visual C++ 2013 Redistributable 12.0.21005 }
VC_2013_REDIST_X86_MIN = '{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}';
VC_2013_REDIST_X64_MIN = '{A749D8E6-B613-3BE3-8F5F-045C84EBA29B}';
VC_2013_REDIST_X86_ADD = '{F8CFEB22-A2E7-3971-9EDA-4B11EDEFC185}';
VC_2013_REDIST_X64_ADD = '{929FBD26-9020-399B-9A7A-751D61F0B942}';
{ Visual C++ 2015 Redistributable 14.0.23026 }
VC_2015_REDIST_X86_MIN = '{A2563E55-3BEC-3828-8D67-E5E8B9E8B675}';
VC_2015_REDIST_X64_MIN = '{0D3E9E15-DE7A-300B-96F1-B4AF12B96488}';
VC_2015_REDIST_X86_ADD = '{BE960C1C-7BAD-3DE6-8B1A-2616FE532845}';
VC_2015_REDIST_X64_ADD = '{BC958BD2-5DAC-3862-BB1A-C1BE0790438D}';
{ Visual C++ 2015 Redistributable 14.0.24210 }
VC_2015_REDIST_X86 = '{8FD71E98-EE44-3844-9DAD-9CB0BBBC603C}';
VC_2015_REDIST_X64 = '{C0B2C673-ECAA-372D-94E5-E89440D087AD}';
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_2010_REDIST_X86) and
VCVersionInstalled(VC_2010_SP1_REDIST_X86));
end;
Update chuckleplant:
Dodane VC++ 2012 kody produktów. Zauważ, że pakiet redystrybucyjny instaluje dwie rzeczy, minimalne środowisko wykonawcze i dodatkowe środowisko uruchomieniowe. Powinno wystarczyć, abyś szukał minimalnego czasu wykonywania. Testowanie pod kątem kodu redystrybucyjnego Microsoft Visual C++ 2012 da INSTALLSTATE_UNKNOWN
, zamiast tego użyj minimalnych kodów środowiska wykonawczego. To taka sama sytuacja dla VC++ 2013 i 2015.
można znaleźć kody produktu dla wszystkich innych wersjach Visual Studio w HKEY_CLASSES_ROOT\Installer\Dependencies\
np HKEY_CLASSES_ROOT\Installer\Dependencies\Microsoft.VS.VC_RuntimeAdditionalVSU_amd64,v14
Coś podobnego został poproszony [ 'here'] (http://stackoverflow.com/q/10982468/960757) jednak Nie zgadzam się z odpowiedzią, ponieważ instaluje framework po uruchomieniu kreatora, ale IMO powinien zostać uruchomiony po naciśnięciu przycisku * Next * i rozpoczyna się instalacja.Spróbuję znaleźć wpisy rejestru potrzebne do tego sprawdzenia. W międzyczasie spójrz na ['this post'] (http://stackoverflow.com/a/10111173/960757). Do tego celu należy użyć parametru ['Check'] (http://www.jrsoftware.org/ishelp/topic_scriptcheck.htm). – TLama