我使用热量来收集我需要的文件作为我的安装程序中的组件,并将它们写入一个单独的 wxs 文件,它工作得很好。
生成文件示例:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="AppData_dir_ref">
<Directory Id="GUID" Name="C" />
<Directory Id="GUID" Name="OLD" />
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="AppData_ComponentGroupId">
<Component Id="GUID" Directory="GUID" Guid="{GUID}">
<File Id="GUID" KeyPath="yes" Source="$(var.test)\C" />
</Component> ...
... 等等....
现在我在我的 SetupMain 中使用它们:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="SETUP TEST 1.0"
Language="1031"
Version="1.0.0.0"
Manufacturer="bla"
UpgradeCode="ID">
<Package Id="*"
Keywords="Installer"
InstallerVersion="300"
Compressed="yes"
Languages='1031'
SummaryCodepage='1252'
Manufacturer="bla"
Description="Setup"
Comments="bla"
InstallScope="perMachine"/>
<Media Id="1" Cabinet="myapplication.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir" >
<Directory Id="LocalAppDataFolder" >
<Directory Id="AppData_dir_ref" Name="Test" />
</Directory>
</Directory>
<Feature Id="F.Core" Title="bla" Level="1">
<Feature Id="F.Data">
<ComponentGroupRef Id="AppData_ComponentGroupId" />
</Feature>
</Feature>
</Product>
</Wix>
不幸的是,我的所有组件和目录都出现了 ICE64 错误:
ICE64 错误:目录 XX 在用户配置文件中,但未在 RemoveFile 表中列出 ICE64 错误:组件 xxenter code here
安装到用户配置文件它必须在 HKCU 下注册一个注册表项作为其密钥路径,而不是文件...
我该如何解决?我在互联网上搜索了一段时间,但找不到提示。这似乎是一件非常简单的事情,基本上我忘了在我的 main.js 中定义。我的目标是构建一个简单的安装程序,它在安装时使用 heat 命令复制文件构建中定义的目录结构,并在卸载时将其删除。
更新 1: 小更新我如何使用 RemoveFolder 和 RegistryValue 标签在以下答案的帮助下修复错误:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="AppData_dir_ref">
<Directory Id="dir1" Name="C" />
<Directory Id="dir2" Name="OLD" />
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="Cg.R">
<Component Id="test" Directory="Data" Guid="...">
<RemoveFolder Id="Data" On="uninstall" Directory="AppData_dir_ref"/>
<RemoveFolder Id="Rf.1" On="uninstall" Directory="C"/>
<RemoveFolder Id="Rf.2" On="uninstall" Directory="OLD"/>
<RegistryValue Root="HKCU" Key="Software\...\..." Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</ComponentGroup>
</Fragment>
<Fragment>
<ComponentGroup Id="Cg.D">
<Component Id="cmp5" Directory="dirC23" Guid="...">
<File Id="fil2" Source="Bla\...\...\...xml" />
<RemoveFolder Id="Rf.b" On="uninstall" Directory="dirC23"/>
<RegistryValue Root="HKCU" Key="Software\...\..." Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
...我不知道这是否是最好的方法,但它现在可以工作。感谢您在将其与heat.exe 自动化一起使用时的任何改进建议或最佳实践。
最后一点是我仍然有警告:
ICE91:文件 x 将安装到每个用户目录 y 中,该目录不会根据 ALLUSERS 值而变化。即使需要按机器安装,此文件也不会复制到每个用户的配置文件中。
我读到这个警告是无害的。但无论如何,很高兴了解将来某个时候可能解决警告的原因。