Erkennen, welche DLLs vcredist_x86.exe (VC 2012) auf dem Zielsystem installiert

Um in Zeta Producer eine GraphicsMagick-Bibliothek zu verwenden, muss die „Visual C++ Redistributable for Visual Studio 2012“-Bibliothek (kurz „VCREDIST“) installiert sein.

Da Zeta Producer, inklusive dessen Installation, auch ohne Administrator-Berechtigungen läuft, ist mein Ziel, dass das auch so bleibt.

Dementsprechend war es mir wichtig, auch VCREDIST ohne (Administrator-)Installation mitzugeben.

Wenn die DLLs im selben Ordner wie die Programmdateien von Zeta Producer liegen, dann ist das möglich.

Leider sind die Bibliothken nicht so einfach zu ermitteln, da VCREDIST ein Setup-Programmdatei ist (EXE), ohne die Chance, einen Programmordner anzugeben.

Vorgehen

Ein Lösung war dann im Artikel „Extract MSI from Visual C++ 2012 Redistributable“ beschrieben:

  1. In der Registry nach dem Uninstall-Schlüssel suchen (bei mir war es „Microsoft Visual C++ 2012“, etwas anders als im Artikel beschrieben, weil ich die x86-Version benutzt hatte).
  2. Dann dort den InstallSource-Eintrag anschauen und die dort verlinkte MSI-Datei kopieren.
  3. Aus diesem MSI dann mit lessmsi die DLLs extrahieren.

Anschließend habe ich die DLLs in den selben Ordner wie die GraphicsMagick-Assembly (DLL) gelegt und danach lief mein Programm korrekt.

Hinweis

Ich hatte zunächst die AnyCPU-Version des GraphicMagick-NuGet-Pakets genommen. Damit lief es wie oben angegeben nicht.

Als ich dann die x86-Version genommen habe und auch von VCREDIST die x86-Version, dann hat es funktioniert.

Update 25.01.2018

Eine noch viel bessere Vorgehensweise ist wie folgt.

Da „vc_redist.x86.exe“ in neueren Versionen mit dem WiX Toolset erstellt wurde, kann dieses auch dazu verwendet werden, die EXE wieder zu entpacken:

  1. Ein aktuelles ZIP-Binary-Release von WiX downloaden.
  2. Den ZIP-Download per Rechtklick in Windows Explorer unter „Eigenschaften“ mit „Zulassen“ freischalten.
  3. Das ZIP-Release entpacken.
  4. Auf der Befehlszeile mit dem Tool „Dark“ das EXE-Archiv entpacken:
    c:\wix311\dark.exe -x c:\temp\dst c:\temp\vc_redist.x86.exe
    
  5. In den extrahierten Ordner („C:\Temp\Dst“) wechseln.
  6. Dort das effektive MSI-Paket lokalisieren. Bei mir in VC++ 2015 war das „C:\temp\dst\AttachedContainer\packages\vcRuntimeMinimum_x86\vc_runtimeMinimum_x86.msi“
  7. Aus diesem MSI dann mit lessmsi die DLLs extrahieren.

Tipp von hier.

Auch nett ist das Tool „All in One Runtimes“, mit dem die ganzen Runtimes grafisch installiert werden können.

Siehe auch „Manuell DLLs aus "vcredist.x86.exe" extrahieren“.