Я использую тепло для сбора файлов, которые мне нужны в качестве компонентов в моей установке, и записываю их в отдельный файл 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: компонент xx enter code here
устанавливается в профиль пользователя, он должен зарегистрировать раздел реестра в HKCU в качестве пути к ключу, а не файл.. .
Как я могу это исправить? Я искал некоторое время в Интернете, но не мог найти подсказку. Кажется, это что-то очень простое, и в основном я забыл определить его в файле main. Моя цель состоит в том, чтобы создать простой установщик, который копирует структуру каталогов, определенную в сборке файла с помощью команды 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. Этот файл не будет скопирован в профиль пользователя, даже если требуется установка на компьютере.
Я читал, что это предупреждение безвредно. Но в любом случае, было бы неплохо понять причину, чтобы, возможно, решить предупреждение когда-нибудь в будущем.