Xin lỗi nếu đó là một nghi thức xấu để trả lời câu hỏi của riêng tôi.
Gần đây tôi tình cờ biết được thông tin về tài sản DISABLEADVTSHORTCUTS . Tôi đã tạo một bản cài đặt với các phím tắt được quảng cáo và đặt thuộc tính DISABLEADVTSHORTCUTS thành 1 để tạo ra các phím tắt không được quảng cáo. Điều này bỏ qua lỗi ICE43 vì lối tắt được quảng cáo có thể sử dụng tệp làm đường dẫn phím. Bởi vì DISABLEADVTSHORTCUTS đã được thiết lập, Windows Installer sẽ thay thế các phím tắt được quảng cáo này bằng các phím tắt thông thường.
Tôi đặt thuộc tính InstallScope của Phần tử gói thành "perMachine". Bộ này là tài sản AllUsers đến 1. Giá trị của ProgramMenuFolder và DesktopFolder sau đó sẽ giải quyết cho tất cả người dùng profile.
Đối với các thư mục được tạo trong ProgramMenuFolder có phần tử RemoveFolder và RegistryValue. Các ví dụ tôi đã thấy ( ex1 , ex2 ) sử dụng HKCU làm gốc cho RegistryValue. Tôi đã thay đổi gốc này thành HKMU , phân giải thành HKCU hoặc HKLM tùy thuộc vào giá trị của ALLUSERS.
Tóm lại, với DISABLEADVTSHORTCUTS được đặt thành 1, các phím tắt được quảng cáo của bạn sẽ không tạo ra lỗi ICE, nhưng sẽ được chuyển đổi thành các phím tắt không được quảng cáo khi được cài đặt. Một RegistryValue với HKMU gốc là tốt cho một KeyPath miễn là nó không phải là đường dẫn phím cho một lối tắt không được quảng cáo.
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Name="Foobar 1.0" Id="YOURGUID-21F1-4026-ABD2-7CC7F8CE4D18" UpgradeCode="YOURGUID-AFA4-46C6-94AA-EEE3D104F903" Language="1033" Codepage="1252" Version="1.0.0" Manufacturer="Acme Ltd.">
<Package Id="*" Keywords="Installer" Description="Acme's Foobar 1.0 Installer" Comments="Foobar is a registered trademark of Acme Ltd." Manufacturer="Acme Ltd." InstallerVersion="100" Languages="1033" Compressed="yes" SummaryCodepage="1252" InstallScope="perMachine" />
<Media Id="1" Cabinet="Sample.cab" EmbedCab="yes" DiskPrompt="CD-ROM #1" />
<Property Id="DiskPrompt" Value="Acme's Foobar 1.0 Installation [1]" />
<Property Id="DISABLEADVTSHORTCUTS" Value="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="Acme" Name="Acme">
<Directory Id="INSTALLDIR" Name="Foobar 1.0">
<Component Id="MainExecutable" Guid="YOURGUID-3E4F-47A2-86F1-F3162E9C4798">
<File Id="FoobarEXE" Name="FoobarAppl10.exe" DiskId="1" Source="FoobarAppl10.exe" KeyPath="yes">
<Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar 1.0" WorkingDirectory="INSTALLDIR" Icon="Foobar10.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="HelperLibrary" Guid="YOURGUID-C7DA-4C02-A2F0-A6E089FC0CF3">
<File Id="HelperDLL" Name="Helper.dll" DiskId="1" Source="Helper.dll" KeyPath="yes" />
</Component>
<Component Id="Manual" Guid="YOURGUID-FF92-4BF4-A322-819A3B2265A0">
<File Id="Manual" Name="Manual.pdf" DiskId="1" Source="Manual.pdf" KeyPath="yes">
<Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Instruction Manual" Advertise="yes" />
</File>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="Foobar 1.0">
<Component Id="ProgramMenuDir" Guid="YOURGUID-D1C2-4D76-BA46-C6FA79862E77">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKMU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id="Complete" Level="1">
<ComponentRef Id="MainExecutable" />
<ComponentRef Id="HelperLibrary" />
<ComponentRef Id="Manual" />
<ComponentRef Id="ProgramMenuDir" />
</Feature>
<Icon Id="Foobar10.exe" SourceFile="FoobarAppl10.exe" />
</Product>
</Wix>