WIX laufen vcredist_x64.exe auf installieren
Ich habe eine Anwendung erstellt, in VS 2015 und erfordert die VC++ Redistributable Paket, um ordnungsgemäß ausgeführt. Vor diesem aktuellen build, den wir wurden mit einer älteren version von VS und einfach verwendet eine merge-Modul-handle der installation der entsprechenden redist-Dateien. Ich habe jedoch festgestellt, dass bei Verwendung der aktuellen version des merge-Module für das Jahr 2015 (Microsoft_VC140_CRT_x64.msm), dass meine Anwendung immer noch nicht funktioniert out of the box. Ich habe einige Graben und es scheint, dass einige Dinge haben sich geändert mit der neuesten version der merge-Module. Es scheint, dass Microsoft empfiehlt jetzt zu installieren vcredist_x64.exe Paket direkt anstatt merge Module.
So, ich bin versucht, eine benutzerdefinierte Aktion erstellen, um dies zu tun. Ich bin nach einer ähnliche tutorial hier, obwohl die Anpassung für die VC Redistributable ausführbare Datei. Das erste, was ich tun müssen, ist setup, wo die .exe-Datei platziert, sobald es installiert ist:
<Directory Id='APPLICATIONROOTDIRECTORY' Name='MyApp'>
<Directory Id="VCREDISTDIR" Name="VCRedist">
</Directory>
</Directory>
Dann, ich brauche, um meine Dateien in ein Komponente-Gruppe, die installiert wird als Teil von einem hidden feature (wie ich will, diese werden automatisch installiert).
<ComponentGroup Id="VCRedist" Directory="VCREDISTDIR">
<Component Id="vcredist_x64.exe" Guid="-INSERT-GUID-HERE-" Win64="yes">
<File Id="VCREDISEXE" Name="vcredist_x64.exe" KeyPath="yes" Source="$(var.VCRedistSourceDir)" Checksum="yes"></File>
</Component>
</ComponentGroup>
Und...
<Feature Id="VCRedistributable" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1">
<ComponentGroupRef Id="VCRedist" />
</Feature>
Zu diesem Zeitpunkt die vcredist_x64.exe sollten kopiert werden, um auf dem Computer des Endbenutzers. Jetzt brauche ich zum erstellen einer benutzerdefinierten Aktion zu starten Sie die ausführbare Datei nach der installation.
<CustomAction Id="InstallVCRedistributable"
FileKey="VCREDISEXE"
Execute="deferred"
ExeCommand="/silent"
Impersonate="no"
Return="check"/>
<InstallExecuteSequence>
<Custom Action="InstallVCRedistributable" Before="InstallFinalize">
<![CDATA[NOT REMOVE]]>
</Custom>
</InstallExecuteSequence>
Ich auch eine status-Nachricht an meine Benutzeroberfläche so, dass ich sehen kann, wenn die ausführbare Datei ausgeführt wird.
<UI>
<ProgressText Action="InstallVCRedistributable">Installing Visual C++ Redistributable for Visual Studio 2015</ProgressText>
</UI>
Nun, wenn ich mein installer sollte starten vcredist_x64.exe... und es funktioniert... aber dann während der installation, die ausführbare Datei, es wird aufgehängt. Ich bekomme eine popup-Meldung, die sagt, es ist ein problem mit diesem Windows Installer-Paket und ein Programm ausführen, das als Teil der Installation wurde nicht abgeschlossen. Es rollt dann-wieder meiner Haupt-installation der Anwendung und wird nie installiert. Kann mir jemand erklären, warum das passiert und wie man es beheben? Danke!
- FYI, hinzufügen Microsoft_VC140_CRT_x64.msm, die in Ihren Installateur wird so lange arbeiten als target-system hat auch die Universal-CRT installiert. Das Modul selbst ist nicht mehr vollständig selbst abhängig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich diese Frage und versucht es dann selbst in der gleichen situation. Ich fand den installer-Fehler, den du in Betrieb war/ist der Fehler 1618: "eine Weitere installation ist bereits im Gange." Es scheint, dass die Ausführung der vc_redist installer in Ihrem eigenen installer funktioniert einfach nicht.
Ihre andere Optionen scheinen Schaffung einer bootstrapper Patrick Allwood vorschlägt oben, oder einfach Fragen der Benutzer zur Installation der vc_redist-Paket auf Ihre eigenen, bevor Sie Ihren eigenen installer. Sie können erkennen, ob die Universal-C-Runtime bereits vorhanden ist, indem Sie für
ucrtbase.dll
imC:\Windows\System32
:Wenn Sie nur eine 32-bit-installer, Sie können auch die
[SystemFolder]
- Eigenschaft direkt.EDIT: Wie Kevin Smyth erwähnt, die version von
ucrtbase.dll
gibt seltsame Fragen - reporting-version 2.X um einige Werkzeuge und die ab der version 10.Y zu anderen tools. Sie können entfernen Sie dieMinVersion
Eigenschaft, wenn Sie wollen einfach nur, um zu überprüfen, die für die Existenz vonucrtbase.dll
.win32api.GetFileVersionInfo('ucrtbase.dll', '\\')
zurück2.6.10586.0
für die version der Datei auf meinem Windows-10-Maschine.sigcheck.exe
zurück10.0.10586.0
. Sehr seltsam. Schlimmer noch,msiexec /i /log*xv
nicht alles loggen, was nützlich ist. Ich entfernteMinVersion
und es funktioniert.Ich denke, der richtige Ansatz zu nehmen, wenn die unter Voraussetzungen, die Ihre eigene Installationsprogramme zu erstellen, die ein WiX-bootstrapper-bundle, das läuft über die einzelnen installer in der Reihe. Diese Griffe Dinge wie rollbacks auf installieren, Fehler, etc, die die Ausführung von benutzerdefinierten Aktionen innerhalb einer installer nicht.
Einem Barebone-Beispiel gesehen werden kann,hier, fügen Sie
<MsiPackage>
und<ExePackage>
imChain
element in der Reihenfolge, die Sie benötigen, um zu installieren.