【问题标题】:How to write and use a retargetable merge module in wix如何在 wix 中编写和使用可重定向的合并模块
【发布时间】:2017-07-12 20:03:36
【问题描述】:

我想编写和使用一个最小的可重定向合并模块。它应该包含 3 个文件

PS C:\Users\mto\sandbox\wixme3> Get-ChildItem files


Directory: C:\Users\mto\sandbox\wixme3\files


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-----        16.02.2015     18:08          0 a
-----        16.02.2015     18:08          0 b
-----        16.02.2015     18:08          0 c

我有以下合并模块:

PS C:\Users\mto\sandbox\wixme3> Get-Content .\MergeModule.wxs
<?xml version="1.0" encoding="UTF-8"?>

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Module Id="a_merge_module" Language="1033" Version="1.0.0.0">
        <Package Id="92b702f4-8687-4bbf-b8c2-24c42be52730" Manufacturer="Me" Description="a merge module" InstallerVersion="300" Platform="x86"></Package>
        <ComponentGroupRef Id="allTheFilesINeed"/>
        <Directory Id='TARGETDIR' Name='SourceDir'>
        </Directory>
    </Module>
</Wix>

我是这样使用的:

PS C:\Users\mto\sandbox\wixme3> Get-Content .\Product.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Name='TestRelocatableMergeModule' Id='d5c54f50-52df-11e4-916c-0800200c9a66' UpgradeCode='e07a1cf0-52df-11e4-916c-0800200c9a66'
         Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Me'>
        <Package Id='*' Keywords='Installer' Description="test merge module"
          Comments='Test Installer' Manufacturer='Acme Ltd.'
          InstallerVersion='301' Languages='1033' Compressed='yes' SummaryCodepage='1252' Platform='x86'/>

        <Media Id="1" Cabinet="product.cab" EmbedCab="yes" />

        <Directory Id='TARGETDIR' Name='SourceDir'>
            <Directory Id="SOMETHING" Name="my_special_folder">
            </Directory>
        </Directory>
        <DirectoryRef Id="SOMETHING">
            <Merge Id="merge" Language="1033" SourceFile="merge_module.msm" DiskId="1" />
        </DirectoryRef>
        <Feature Id="Msm" Title="Msm" Level="1">
            <MergeRef Id="merge" />
        </Feature>
    </Product>
</Wix>

然后像这样拼接起来:

PS C:\Users\mto\sandbox\wixme3> Get-Content .\makeInstaller.cmd
del *.wixobj
del allTheFilesINeed.wixobj
del allTheFilesINeed.wxs
del *.msi
del *.msm
heat.exe dir "files" -cg allTheFilesINeed -var var.BUILDFOLDER -gg -g1 -srd -sfrag -o allTheFilesINeed.wxs
candle.exe -dBUILDFOLDER="files" allTheFilesINeed.wxs MergeModule.wxs -v
candle.exe Product.wxs
light.exe -dBUILDFOLDER="files" allTheFilesINeed.wixobj MergeModule.wixobj -o merge_module.msm
light.exe Product.wixobj -o product.msi

这没有按预期工作。 Product.wxs 中的文件夹被忽略,文件直接位于C:\ 下。我读过我需要使用可重定向的合并模块。然后,合并模块应该使用配置设置来决定将文件放在哪里。此配置应在使用合并模块的产品中设置。我还没有找到如何做到这一点的例子。谁能指出我正确的方向?

【问题讨论】:

    标签: wix merge-module


    【解决方案1】:

    使用

    <Directory Id="TARGETDIR" Name="SourceDir">
                <Directory Id="MergeRedirectFolder" Name="."/>        
    </Directory>
    

    并在您的合并模块组件中引用此目录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-24
      • 2012-03-25
      • 2015-01-22
      • 2017-06-04
      • 2011-03-07
      • 1970-01-01
      相关资源
      最近更新 更多