简单WIX Installer仅复制文件功能失效,错误原因是什么
WIX代码问题排查
你的代码存在以下可直接导致文件不生成的问题:
return (<Package>节点缺少`InstallScope="perMachine"`属性:默认安装上下文为单用户模式,此模式下`ProgramFilesFolder`会被重定向到当前用户的`AppData\Local\Programs`目录,不会写入系统级的Program Files路径,因此你在系统目录下找不到对应文件。 )return (<Component>节点未设置`KeyPath`:Windows Installer要求每个组件必须配置唯一的KeyPath来检测组件安装状态,缺失该配置会导致组件安装逻辑异常,无法正常部署文件。 )- 源文件路径不匹配:编译安装包时,需要保证你指定的
Source="notepad.exe"对应的文件,和WXS源文件在同一目录,否则编译阶段不会把文件打入cab包,安装时自然没有内容可复制。 - 64位系统适配问题:若你使用64位系统且期望安装到64位原生Program Files目录而非
Program Files (x86),还需要补充平台配置,否则默认按32位程序处理,会被重定向到x86目录。
修正后参考代码
<?xml version="1.0"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <!-- 64位安装需加Platform="x64",32位可删除该属性 --> <Product Id="*" UpgradeCode="8806367C-FFA1-40C7-B16A-462CF6D941BE" Name="Test_Product_Name" Version="0.0.1" Manufacturer="Test_Company_Name" Language="1033" Platform="x64"> <!-- 新增InstallScope="perMachine" 配置 --> <Package InstallerVersion="200" Compressed="yes" Comments="Windows Installer Package" InstallScope="perMachine"/> <Media Id="1" Cabinet="product.cab" EmbedCab="yes"/> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFiles64Folder"> <!-- 64位用ProgramFiles64Folder,32位保留ProgramFilesFolder --> <Directory Id="INSTALLDIR" Name="20211022_test"> <!-- 新增KeyPath="yes",64位安装需加Win64="yes" --> <Component Id="ApplicationFiles" Guid="172743A1-08E5-483C-96F1-0CE1373F2AF1" KeyPath="yes" Win64="yes"> <File Id="ApplicationFile1" Source="notepad.exe"/> </Component> </Directory> </Directory> </Directory> <Feature Id="DefaultFeature" Level="1"> <ComponentRef Id="ApplicationFiles"/> </Feature> </Product> </Wix>
注意:安装该安装包需要右键选择「以管理员身份运行」,否则没有写入Program Files目录的权限,也会导致文件生成失败。
内容的提问来源于stack exchange,提问作者Ardow
相关产品推荐
相关产品推荐

