Tôi có đơn đăng ký được biên soạn trong VS 2015 và yêu cầu gói VC++ Redistributable để chạy đúng cách. Trước phiên bản mới nhất này, chúng tôi đã sử dụng phiên bản cũ hơn của VS và chỉ đơn giản sử dụng mô-đun hợp nhất để xử lý việc cài đặt các tệp redist thích hợp. Tuy nhiên, tôi nhận thấy rằng khi sử dụng phiên bản mới nhất của các mô-đun hợp nhất cho năm 2015 (Microsoft_VC140_CRT_x64.msm) mà ứng dụng của tôi vẫn không hoạt động. I did some digging và có vẻ như một số thứ đã thay đổi với phiên bản mới nhất của mô đun hợp nhất. Có vẻ như Microsoft hiện đang đề xuất cài đặt gói vcredist_x64.exe trực tiếp thay vì sử dụng các mô-đun hợp nhất.WIX chạy vcredist_x64.exe khi cài đặt
Vì vậy, tôi đang cố tạo hành động tùy chỉnh để thực hiện việc này. Tôi đang theo dõi similar tutorial here, mặc dù điều chỉnh nó cho VC Redistributable thực thi. Điều đầu tiên tôi cần làm là thiết lập nơi tệp .exe sẽ được đặt sau khi được cài đặt:
Sau đó, tôi cần phải thêm tệp của mình vào nhóm thành phần sẽ được cài đặt như một phần của ẩn tính năng (vì tôi muốn cài đặt này tự động).
<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>
Và ...
<Feature Id="VCRedistributable" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1">
<ComponentGroupRef Id="VCRedist" />
</Feature>
Tại thời điểm này, các vcredist_x64.exe nên được sao chép vào máy tính của người dùng cuối. Bây giờ, tôi cần tạo một hành động tùy chỉnh để khởi động tệp thực thi sau khi cài đặt.
<CustomAction Id="InstallVCRedistributable"
FileKey="VCREDISEXE"
Execute="deferred"
ExeCommand="/silent"
Impersonate="no"
Return="check"/>
<InstallExecuteSequence>
<Custom Action="InstallVCRedistributable" Before="InstallFinalize">
<![CDATA[NOT REMOVE]]>
</Custom>
</InstallExecuteSequence>
Tôi cũng bao gồm thông báo trạng thái cho giao diện người dùng của mình để tôi có thể xem thời điểm thực thi được thực hiện.
<UI>
<ProgressText Action="InstallVCRedistributable">Installing Visual C++ Redistributable for Visual Studio 2015</ProgressText>
</UI>
Bây giờ, khi tôi chạy trình cài đặt, nó sẽ khởi chạy vcredist_x64.exe ... và sau đó trong khi cài đặt tệp thực thi nó bị treo lên. Tôi nhận được thông báo bật lên cho biết có sự cố với Gói cài đặt Windows này và chương trình chạy như một phần của quá trình thiết lập không hoàn thành. Sau đó nó quay trở lại cài đặt ứng dụng chính của tôi và không bao giờ được cài đặt. Bất cứ ai có thể giải thích lý do tại sao điều này đang xảy ra và làm thế nào để sửa chữa nó? Cảm ơn!
FYI, thêm Microsoft_VC140_CRT_x64.msm trong trình cài đặt của bạn * sẽ * hoạt động miễn là hệ thống đích cũng có cài đặt Universal CRT. Bản thân mô-đun hợp nhất không còn hoàn toàn tự phụ thuộc nữa. –