Giá trị khóa đăng ký không được cập nhật với dữ liệu dự định của nó bằng WiX Toolset cho MSI. Nếu k: v bị thiếu, nó sẽ thêm nó. Nếu dữ liệu của k: v được đặt thành 0, nó bỏ qua nó hoàn toàn, đó là vấn đề thực tế ở đây (tôi nghĩ)Khoá đăng ký không cập nhật khi giá trị được đặt thành 0 khi sử dụng WiX Toolset
Mục tiêu cơ bản là xác minh giá trị khóa đăng ký này tồn tại với giá trị dữ liệu dự định trước khi cài đặt, và nhắc khởi động lại sẽ kích hoạt nếu khóa phải được thêm/cập nhật.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
<Product Id="*" Name="SampleInstaller" Language="1033" Version="1.0.0.0" Manufacturer="ACME" UpgradeCode="cf6248e9-d7da-4996-9b8e-90072e8510f6">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Platform="x64"/>
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Feature Id="ProductFeature" Title="SampleInstaller" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder64">
<Directory Id="INSTALLFOLDER" Name="SampleInstaller" />
</Directory>
</Directory>
<Property Id="VKB_QUERY_HKCU" Secure="yes">
<RegistrySearch Id="VkbVisibleHkcu"
Win64="yes"
Type="raw"
Root="HKCU"
Key="Software\Microsoft\TabletTip\1.7"
Name="TipbandDesiredVisibility"/>
</Property>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="ShowVKB_Registry_HKCU" Guid="{97AB4B1D-C9C8-4B34-9328-FF8CA3ED8992}" Directory="INSTALLFOLDER">
<RegistryKey Id="VKB_Registry_Key_HKCU" Root="HKCU" Key="Software\Microsoft\TabletTip\1.7" ForceCreateOnInstall="yes" ForceDeleteOnUninstall="no">
<RegistryValue Id="VKB_Registry_Value_HKCU" Action="write" Type="integer" Name="TipbandDesiredVisibility" Value="1"/>
</RegistryKey>
</Component>
</ComponentGroup>
<InstallExecuteSequence>
<ScheduleReboot After="InstallFinalize">NOT (VKB_QUERY_HKCU = "#1")</ScheduleReboot>
</InstallExecuteSequence>
</Fragment>
</Wix>
Ngoài ra, nó có vẻ như mã thoát khỏi MSIEXEC
luôn trở 0
thay vì 3010
của 1641
khi kiểm tra $LastExitCode
và %errorlevel%
. Tôi đã không rối tung với các hành vi khởi động lại khác nhau, nhưng tôi nghĩ rằng có dấu nhắc khởi động lại sẽ khiến trình cài đặt của tôi thoát ra không khác, vì vậy bất kỳ hướng dẫn nào cũng được đánh giá cao.
Bạn cần phải xác định 'AllowSameVersionUpgrades =" yes "' trong '' nếu bạn muốn có thể kiểm tra nâng cấp mà không thay đổi phiên bản của bạn khi biên dịch lại. Để kiểm tra nâng cấp mà không cần sử dụng, bạn sẽ cần phải nâng cấp phiên bản với mỗi bản dựng mới thay đổi một trong 3 phần đầu tiên của phiên bản vì Windows Installer bỏ qua phần thứ 4 trong so sánh phiên bản. –
Bạn không nhận được sản phẩm đã tồn tại vì bạn đã sử dụng '' chỉ định rằng mọi ** build ** bạn sẽ nhận được GUID Id sản phẩm mới và về cơ bản khác với các bản dựng khác ngay cả với chính xác cùng một nguồn. Tôi rất muốn đề nghị thực hiện cài đặt thử nghiệm trên máy ảo, nơi bạn có thể dễ dàng quay trở lại trạng thái 'sạch' đã biết vì bạn có thể vô tình gây ra sự cố khi phát triển cài đặt. –
Nghe hay đấy, @BrianSutherland! Tôi chắc chắn sẽ thấy về thử nghiệm chúng trên máy ảo. Nó có vẻ lạ với tôi rằng ID sản phẩm sẽ mặc định cho loại hành vi đó với các mẫu thiết lập được đóng gói với phần mở rộng Visual Studio. Có một số loại lý do tại sao đó được coi là một lợi thế so với GUID được tạo trước không? –