3 votes

InnoSetup - Vérifiez si Visual Studio 2010 CRT Redist est installé, sinon exécutez l'installateur

Actuellement, j'ai ceci dans cette partie du script Inno

[Run]
Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installation des bibliothèques Visual Studio 2010 C++ CRT...

Il exécutera l'installateur vcredist pendant l'installation de l'application. Mais le problème avec cela est que si l'utilisateur l'a déjà installé, cela affiche des choses comme

  • Réparer/Supprimer
  • Version déjà plus récente détectée

Y a-t-il un moyen d'éviter cela et d'exécuter cet installateur uniquement si nécessaire ? Que devrais-je ajouter au script Inno ?

ÉDIT :

Avec l'aide de @John liens j'ai fait cela avec la fonction suivante ajoutée

J'ai également utilisé ce site pour obtenir le code produit visual studio 2010 crt++ et utilisé le dossier de désinstallation dans le registre pour détecter s'il est installé.

function InitializeSetup(): Boolean;
var
  ErrorCode: Integer;
  RedistInstalled : Boolean;
  Result1 : Boolean;
begin
  RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
  if RedistInstalled then
  begin
    Result := true;
  end else
  begin
    RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
    if RedistInstalled then
    begin
      Result := true;
    end else
    begin
      Result1 := MsgBox('Cette configuration nécessite le Package redistribuable Microsoft Visual C++ 2010 (x86). Veuillez installer le Package redistribuable Microsoft Visual C++ 2010 (x86) et exécutez à nouveau cette configuration.  '#13#10' '#13#10'Voulez-vous télécharger le Package redistribuable Microsoft Visual C++ 2010 (x86) maintenant ?',
        mbConfirmation, MB_YESNO) = idYes;
      if Result1 =false then
      begin
        Result:=false;
      end else
      begin
        Result:=false;
        ShellExec('open',
          'http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe',
          '','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
      end;
    end;
  end;
end;

Ce serait quand même bien si toutefois l'installateur continuait après le téléchargement/l'installation ou que je pouvais d'une manière ou d'une autre adapter mon code précédent qui exécute l'installateur inclus (avec l'installation) :

 [Run]
    Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installation des bibliothèques Visual Studio 2010 C++ CRT...

mais c'est quand même suffisant.

2voto

Andrei Darie Points 3

Peut-être pouvez-vous utiliser HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs. Vous pouvez trouver toutes les versions qui ont été installées. DLL a un nom spécial qui dépend de l'installation redistribuable de C++ :

90: Visual Studio 2008 (Version 9.0) (atl90.dll, msvcr90.dll, msvcp90.dll)

100: Visual Studio 2010 (Version 10.0) (atl100.dll, msvcr100.dll, msvcp100.dll)

110: Visual Studio 2012 (Version 11.0) …110

120: Visual Studio 2013 (Version 12.0) …120

140: Visual Studio 2015 (Version 14.0) …140

150: Visual Studio 2017 (Version 15.0) (atl150.dll, msvcr150.dll, msvcp150.dll)

160: Visual Studio 2019 (Version 16.0) (atl160.dll, msvcr160.dll, msvcp160.dll)

Cordialement,

0voto

John Points 1861

Je suis "officiellement" le chemin MS https://stackoverflow.com/a/199783/866333. Pas encore exactement viral, mais ça marche pour moi.

Voir Inno Setup : Vérifier que .NET 4.0 est installé pour du code fonctionnel pour détecter une seule version.

Voici le meilleur exemple du code que j'utilise vraiment : http://www.vincenzo.net/isxkb/index.php?title=.NET_-_Detect_framework

Tous les éléments ci-dessus ciblent le framework .NET. Pour VCRT, j'extraierais le redistribuable de VC2010 et j'aurais InnoSetup copier les contenus dans le répertoire d'installation cible de l'application. De cette façon, les fichiers système ne sont pas modifiés.

0voto

Suivez ce lien https://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup. Il est destiné aux cadres .NET et aux éléments distribuables VC. Vous pouvez vérifier si un élément distribuable, disons 2013, est installé sur un ordinateur ou non. S'il n'est pas installé, il l'installera pour vous. JE RECOMMANDE VIVEMENT ceci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X