尝试让多个实例工作,它不会将每个实例放在自己的文件夹中

问题描述 投票:0回答:1

尝试让多个实例工作,如何让 ProductName 变量成为基于实例的目录名称?下面的代码片段出现在完整的代码中。

<Directory Id="ProductName">

我使用以下链接作为指南:
https://sklyarenko.net/posts/revisited-multiple-instance-and-patches

我尝试过以下方法:

msiexec /i MultiInstance.msi MSINEWINSTANCE=1 TRANSFORMS=":I02"
msiexec /i MultiInstance.msi MSINEWINSTANCE=1 TRANSFORMS=":I03"

它只是被复制到相同的文件夹结构。

    <?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <?define ConsoleApp1_TargetDir=$(var.ConsoleApp1.TargetDir)?>
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="Tester" UpgradeCode="4ca5374e-c85c-4d75-8ca3-bfdcc63a6605">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>

        <Property Id="INSTANCEID" Value="WhereDoesValueShowUp" Admin="yes" />

        <InstanceTransforms Property="INSTANCEID">
            <Instance Id="I01" ProductCode="{3E3B77E8-B74A-4BD0-A426-DF48C47AF188}" ProductName="My Product 01"/>
            <Instance Id="I02" ProductCode="{17D21A60-4DAF-4640-8271-52FAF88435C7}" ProductName="My Product 02"/>
            <Instance Id="I03" ProductCode="{2240F420-9892-45EF-9809-326095D6AFE4}" ProductName="My Product 03"/>
        </InstanceTransforms>
    </Product>


    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="ProductName">
                     <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
                </Directory>
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="ConsoleApp1.runtimeconfig.json" Guid="7933cc56-e6ee-42be-9022-ec4eee3b2ad7" MultiInstance="yes">
                <File Id="ConsoleApp1.runtimeconfig.json" Name="ConsoleApp1.runtimeconfig.json" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.runtimeconfig.json" KeyPath="yes" />
            </Component>
            <Component Id="ConsoleApp1.dll" Guid="75ed96b5-a187-46aa-9def-69e475f06bd7" MultiInstance="yes">
                <File Id="ConsoleApp1.dll" Name="ConsoleApp1.dll" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.dll" KeyPath="yes" />
            </Component>
            <Component Id="ConsoleApp1.exe" Guid="{F4665DAB-DD96-4A06-9E0E-D58765F4A3B9}" MultiInstance="yes">
                <File Id="ConsoleApp1.exe" Name="ConsoleApp1.exe" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.exe" KeyPath="yes" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>
wix wix3
1个回答
0
投票

要根据实例的

ProductName
动态设置目录名称,您可以在
Instance
部分中使用
SetName
元素的
InstanceTransforms
属性。以下是如何修改 WiX XML 代码来获得此名称:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <?define ConsoleApp1_TargetDir=$(var.ConsoleApp1.TargetDir)?>
    <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="Tester" UpgradeCode="4ca5374e-c85c-4d75-8ca3-bfdcc63a6605">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate EmbedCab="yes" />

        <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>

        <Property Id="INSTANCEID" Value="WhereDoesValueShowUp" Admin="yes" />

        <InstanceTransforms Property="INSTANCEID">
            <Instance Id="I01" ProductCode="{3E3B77E8-B74A-4BD0-A426-DF48C47AF188}" ProductName="My Product 01" SetName="ProductName" />
            <Instance Id="I02" ProductCode="{17D21A60-4DAF-4640-8271-52FAF88435C7}" ProductName="My Product 02" SetName="ProductName" />
            <Instance Id="I03" ProductCode="{2240F420-9892-45EF-9809-326095D6AFE4}" ProductName="My Product 03" SetName="ProductName" />
        </InstanceTransforms>
    </Product>


    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="ProductName" Name="[ProductName]">
                     <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
                </Directory>
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <Component Id="ConsoleApp1.runtimeconfig.json" Guid="7933cc56-e6ee-42be-9022-ec4eee3b2ad7" MultiInstance="yes">
                <File Id="ConsoleApp1.runtimeconfig.json" Name="ConsoleApp1.runtimeconfig.json" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.runtimeconfig.json" KeyPath="yes" />
            </Component>
            <Component Id="ConsoleApp1.dll" Guid="75ed96b5-a187-46aa-9def-69e475f06bd7" MultiInstance="yes">
                <File Id="ConsoleApp1.dll" Name="ConsoleApp1.dll" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.dll" KeyPath="yes" />
            </Component>

通过此修改,将根据

ProductName
元素中指定的实例的
ProductName
属性动态设置
Instance
目录。

© www.soinside.com 2019 - 2024. All rights reserved.