代码之家  ›  专栏  ›  技术社区  ›  kudlatiger

如何从源文件夹复制所有文件而不在WIX安装程序配置中指定文件名

  •  1
  • kudlatiger  · 技术社区  · 6 年前

          <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="MergeRedirectFolder">
        <Component Id="owcF3EB3D7C133F5B48E5859309ABDC2EE0" Guid="5a6040ae-b91e-47b6-8438-d9cd47fb947a">
          <File Id="owfF3EB3D7C133F5B48E5859309ABDC2EE0" 
         Source="$(var.SourceDir)\api-ms-win-core-console-l1-1-0.dll" KeyPath="yes" />
        </Component>
        <Component Id="owcB0E3C7251F136710A0F11E0C18525364" Guid="f80e6202-0436-d488-52cf-827e37483096">
          <File Id="owfB0E3C7251F136710A0F11E0C18525364" 
          Source="$(var.SourceDir)\api-ms-win-core-datetime-l1-1-0.dll" KeyPath="yes" />
        </Component>
        <Component Id="owc4B0AD9DF281D253C1207D4E82DEB0DD2" Guid="4ac4edbd-2c6a-8aed-125e-11237a36e4f8">
         <File Id="owf0E5D53A7E23AE08AF9D984ADC41AC589"
    
         Source="$(var.SourceDir)\publish\sos_amd64_amd64_4.6.26628.05.dll" KeyPath="yes" />
    

    我已经定义了我的源目录如下

        <?define SourceDir="..\..\Services\bin\Debug\netcoreapp2.1\win7-x64\"?>
    

    如何指定WIX来复制所有文件,而不是在每行中指定一个?

    我发布的输出文件在不同的机器上有不同的版本,所以我不想在WIX配置中硬编码文件版本。

    在开发机器中 ,我有文件 sos\ amd64\ amd64\ 4.6.26725。 06

    ,我有文件 sos\ amd64\ amd64\ 4.6.26725。

    如果看到,则上述文件中的版本不同。因此,由于*.wxs文件中的版本不匹配,Wix生成失败。所以我想读取文件夹中的所有文件,而不是指定单个文件。

    更新

          <HeatDirectory OutputFile="ComponentsGenerated.wxs" 
                   DirectoryRefId="INSTALLFOLDER" 
                   Transforms="Filter.xslt" 
                   ComponentGroupName="PublishedComponents" 
                   SuppressCom="true" 
                   Directory="..\..\Service\bin\$(Configuration)\netcoreapp2.1\win-$(Platform)\publish" 
                   SuppressFragments="true" SuppressRegistry="true" 
                   SuppressRootDirectory="true" 
                   AutoGenerateGuids="false" 
                   GenerateGuidsNow="true" 
                   ToolPath="$(WixToolPath)" 
                   PreprocessorVariable="var.BasePath" />
    

    因为我必须安装并运行windows服务,所以我使用Transforms方法删除组件WXS文件中生成的EXE。

    我现在爱上了Wix!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Christopher Painter    6 年前

    我可以从创作中看到您正在使用IsWiX(免责声明:我是作者)。IsWiX被设计成只支持静态创作,而不是您正在尝试的那种创作。我在博客上写过很多次,为什么我觉得这样做更安全,但是在堆栈溢出上讲这个故事通常不太好。

    在代码文件夹的主安装项目中,创建一个名为收获组件.wxs"

    将此空文件提交到源代码管理并将其添加到.gitignore(如果使用Git)。

    将以下内容放在项目的预构建步骤中

    C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe" dir "$(SolutionDir)Deploy\Path-To-Some-Directory-To-Harvest" -dr INSTALLLOCATION -cg HarvestedComponents -gg -g1 -sf -srd -scom -sreg -ke -var "var.Deploy" -out "$(SolutionDir)ClientTools\Code\harvestedcomponents.wxs
    

    您必须对其进行一些调整,以匹配中所需的目录结构功能.wxs.

    现在要将这些收获的组件连接到安装程序,您需要编辑代码\功能.wxs. 添加:

    <ComponentGroupRef Id="HarvestedComponents" />
    

    要将这些组件关联到的功能。

    注意:请注意,这种方法存在权衡。主要是:

    http://blog.iswix.com/2007/06/dealing-with-very-large-number-of-files.html

    推荐文章