Wix3安装包构建警告LGHT1076及安装失败1603问题求助
Wix3安装包问题解决(ICE71警告+1603安装失败)
问题1:ICE71警告(Media表无条目)
原因
在部分Wix3版本中,<MediaTemplate />无法正确生成Media表条目,触发ICE71合规检查警告。
解决方法
将<MediaTemplate />替换为明确的<Media />元素,指定Cabinet文件并嵌入到MSI包中。
问题2:安装错误1603
原因
桌面目录(DesktopFolder)被错误嵌套在ProgramFiles64Folder下,导致安装时无法定位到系统默认桌面路径,触发安装失败。
解决方法
将DesktopFolder直接移到TARGETDIR根目录下,修正目录结构。
修改后的完整Product.wxs代码
<?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <?define Test_TargetDir=$(var.Test.TargetDir)?> <Product Id="*" Name="Test_1" Language="1033" Version="1.0.0.0" Manufacturer="NP" UpgradeCode="8ad05ea9-ba50-49ab-8c78-ff2d5df80760"> <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> <!-- 替换MediaTemplate为明确的Media元素,解决ICE71警告 --> <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> </Product> <Fragment> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFiles64Folder"> <Directory Id="INSTALLFOLDER" Name="Test_1" /> </Directory> <!-- 将DesktopFolder移到TARGETDIR下,修正目录结构 --> <Directory Id="DesktopFolder" Name="Desktop" /> </Directory> </Fragment> <Fragment> <Icon Id="MyIcon" SourceFile="Icons\Test.ico" /> <DirectoryRef Id="DesktopFolder"> <Component Id="ApplicationShortcutDesktop" Guid="afe4401f-1d30-49d8-8d3d-6b2a8baea90c"> <Shortcut Id="ApplicationDesktopShortcut" Name="Test_1" Description="Test_1" Target="[INSTALLFOLDER]Test.exe" Icon="MyIcon" WorkingDirectory="INSTALLFOLDER" /> <!-- 添加RegistryValue作为组件KeyPath,符合MSI规范 --> <RegistryValue Root="HKCU" Key="Software\NP\Test_1" Name="DesktopShortcut" Type="integer" Value="1" KeyPath="yes" /> </Component> </DirectoryRef> <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> <Component Id="FTDI2XX.xml" Guid="5a160538-7074-491c-b0d4-8bd607bf532d"> <File Id="FTDI2XX.xml" Name="FTDI2XX.xml" Source="$(var.Test_TargetDir)FTDI2XX.xml" /> </Component> <Component Id="NationalInstruments.Common.dll" Guid="04196434-4b7f-464e-ad36-ad7a37626646"> <File Id="NationalInstruments.Common.dll" Name="NationalInstruments.Common.dll" Source="$(var.Test_TargetDir)NationalInstruments.Common.dll" /> </Component> <Component Id="NationalInstruments.DAQmx.dll" Guid="a04403e5-5a18-4d77-9683-f28bd40f78d5"> <File Id="NationalInstruments.DAQmx.dll" Name="NationalInstruments.DAQmx.dll" Source="$(var.Test_TargetDir)NationalInstruments.DAQmx.dll" /> </Component> <Component Id="Test.exe" Guid="0fb6652c-15aa-49ad-a767-782789e09bfe"> <File Id="Test.exe" Name="Test.exe" Source="$(var.Test_TargetDir)Test.exe" /> </Component> <Component Id="Test.exe.config" Guid="35269577-ee7f-4ead-94ed-be04d30d8db4"> <File Id="Test.exe.config" Name="Test.exe.config" Source="$(var.Test_TargetDir)Test.exe.config" /> </Component> <Component Id="FTDI2XX.dll" Guid="3406afc4-7e7d-456e-aa07-c40a13f13fb7"> <File Id="FTDI2XX.dll" Name="FTDI2XX.dll" Source="$(var.Test_TargetDir)FTDI2XX.dll" /> </Component> <Component Id="Test.pdb" Guid="787670e1-4161-4388-b936-49f03b136ab2"> <File Id="Test.pdb" Name="Test.pdb" Source="$(var.Test_TargetDir)Test.pdb" /> </Component> <Component Id="Test.ico" Guid="1fea4f4e-0de5-4bdf-b4f0-9ec2a68fbd16"> <File Id="Test.ico" Name="Test.ico" Source="$(var.Test_TargetDir)Test.ico" /> </Component> </ComponentGroup> <Feature Id="ProductFeature" Title="Test_1" Level="1"> <ComponentGroupRef Id="ProductComponents" /> <ComponentRef Id="ApplicationShortcutDesktop" /> </Feature> </Fragment> </Wix>
额外说明
给桌面快捷方式组件添加了RegistryValue作为KeyPath,符合MSI组件的最佳实践——每个组件需要唯一的KeyPath,避免安装时组件状态检测异常。
内容的提问来源于stack exchange,提问作者Jeffrey Jacobs
相关产品推荐
相关产品推荐

