【问题标题】:How to specify source location in wix如何在wix中指定源位置
【发布时间】:2022-01-05 14:47:35
【问题描述】:

如何使生成的文件中指定的源对构建可见?

我有一个名为 Foo 的项目和一个名为 FooSetup 的项目。它们具有相同的父目录。为了生成要安装的文件列表,我在FooSetup 中运行:

heat dir "..\Foo\bin\Release" -cg "SomeGroupName" -ag -template:fragment -out heat.wxs

现在,当我尝试构建安装程序时,我得到:

The system cannot find the file 'SourceDir\Foo.dll'.

(该文件确实存在于Release 目录中)

Foo\bin\Release 的路径在 FooSetup 项目属性的包含路径中指定。

我在这里遗漏了什么 - 为什么没有找到列出的文件?

【问题讨论】:

    标签: wix windows-installer


    【解决方案1】:

    WiX 学习资源:几个 WiX 资源链接:


    WiX 预处理器变量:什么是 SourceDir? Rob Mensching (WiX creator) on SourceDir.

    As explained here你可以把SourceDir改成compiler variable

    Heat.exe:像这样的:

    "%WIX%bin\heat.exe" dir . -sfrag -suid -ag -var MyReleasePath -out MySource.wxs
    

    你会得到这样的东西:

    <!-- Extract -->
    
      <Component Id="MyFile.exe" Guid="*">
         <File Id="MyFile.exe" KeyPath="yes" Source="$(MyReleasePath)\MyFile.exe" />
      </Component>
    
    <!-- End of Extract -->
    

    WiX 示例:然后将其插入到源代码中。像这样的:

    <!-- START OF COMPILER VARIABLES: -->
    <?define MyVersion = "1.0.0.0" ?>
    <?define MyReleasePath = "C:\My Releases\Wix Testing\" ?>
    <!-- END OF COMPILER VARIABLES: -->
    
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    
      <Product Id="*" Name="WiX Testing" Language="1033" Version="$(var.MyVersion)"
               Manufacturer="WiX Testing" UpgradeCode="PUT-GUID-HERE">
    
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    
        <!-- Enable line below for GUI in MSI -->
        <!-- <UIRef Id="WixUI_Mondo" /> -->
        
        <MediaTemplate EmbedCab="yes" />
        <Feature Id="Main" Title="Main Feature" Level="1" />
    
        <Directory Id="TARGETDIR" Name="SourceDir">
          <Directory Id="ProgramFilesFolder">
            <Directory Id="INSTALLFOLDER" Name="WiX Testing">
    
             <!-- Essential part follows: -->
    
              <Component Feature="Main">
                <File Source="$(var.MyReleasePath)MyFile.exe"></File>
              </Component>
    
             <!-- End of Essential part -->
    
            </Directory>
          </Directory>
        </Directory>
      </Product>
    
    </Wix>
    

    批处理文件编译:一旦您定义了变量,Visual Studio 就会处理大部分构建问题。如果您想“手动”编译,这里有一个快速示例:

    "%WIX%bin\candle.exe" MySource.wxs -ext WixUIExtension >> Build.log
    "%WIX%bin\light.exe" -out Test.msi MySource.wixobj -ext WixUIExtension >> Build.log
    

    链接:

    【讨论】:

    • 我通过一些改动让它工作起来。 -var MyReleasePath 必须是 -var var.MyReleasePath 才能编译。我没有复制整个热量生成文件,而是使用-cg AppFiles -dr INSTALLFOLDER,将ComponentGroupRef 添加到Feature,并且不得不在热量生成文件中注释掉&lt;Directory Id="Release" Name="Release"&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多