在使用HEAT.EXE生成片段后,如何将组件群Refs添加到功能中

  • 本文关键字:组件 Refs 添加 功能 HEAT EXE 片段 wix
  • 更新时间 :
  • 英文 :


我需要动态创建一个安装程序,用于文本文件中包含的文件列表。

文件列表包含来自许多不同目录的单个文件,并且很容易定期更改。我正在尝试创建一个安装程序,每次创建文件列表的新版本时都不需要更新。

到目前为止,我正在从cmd脚本内的命令行调用heat.exe,在该命令行中,我在其中使用for loop迭代通过文件列表,在每个文件上运行加热命令以创建组件的片段。

FOR /F "delims=;"  %%a IN (FileList.txt) DO (heat.exe file "%%a" -cg ComponentGroupName -gg -g1 -sfrag -dr DirectoryName %%~da -out "%~dp0%%~na.wxs")

显然,这一点代码将为每个组件群提供相同的名称,这构成了一个问题,但是我可以通过使用组件组名称中的文件名来解决该问题。

我正在努力的位是如何将组件组的名称添加到我的project.wsx文件中的特征元素中。

我已经阅读了Wix Toolset文档手册和书中的相关部分Wix 3.6:Windows Installer XML的开发人员指南,无法找出如何执行此操作。

我很感谢我可以使用某种形式的文本替换来实现此目的,但是我希望Wix Toolset中内置了一些东西,因为我不能成为第一个需要动态创建热量生成的组件的人。

ive提出了可以接受的解决方案。IM正在执行的操作是运行CMD文件以生成热量组件。这些组件中的每一个都存储在其自己的组件集中,由ID" ComponentGroup" 文件列表中的迭代计数器识别。

生成了热量成分后,然后在单独的WXS文件中创建一个进一步的组合组,该文件包含由热量创建的每个组件集团的组件grouprefs。

由于此组件群是从CMD文件创建的,我知道ID的ID,我可以在我的功能中引用它。

    @echo off
setlocal enabledelayedexpansion
set /a count = 0
FOR /F "delims=;" %%a IN (FileList.txt) DO (
set /a count=count+1
heat.exe file "%%a" -cg "ComponentGroup!count!" -gg -g1 -sfrag -dr NotSureWhatGoesHereYet %%~da -out "%~dp0%%~na.wxs" 
)
(
echo ^<?xml version="1.0" encoding="utf-8"?^>
echo ^<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"^>
echo      ^<Fragment^>
echo          ^<ComponentGroup Id="ComponentGroup"^>
) > test.wxs
FOR /L %%i IN (1,1,%count%) DO (
  echo              ^<ComponentGroupRef Id="ComponentGroup%%i" /^> >> Components.wxs
)
(
echo          ^</ComponentGroup^>
echo     ^</Fragment^>
echo ^</Wix^> 
) >> Components.wxs

感谢您的回复。@TomBlodget我从您的第一个答案中汲取了灵感。感谢您的时间

最新更新