如何让wix安装程序在运行时根据reg键值安装特定文件夹

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

我正在开发一个 WiX 安装程序,它将根据 reg 键值安装 2 个文件夹中的 1 个。

我愚蠢地忽略了这样一个事实,即我所做的方式,它将检查 reg 键值并在构建时更改热源路径 - 这意味着它只会打包 2 个文件夹中的 1 个。

我想打包这两个文件夹,但是,希望 .msi 本身检查其运行的计算机的 reg 键值并决定安装哪个文件夹。但我不知道该怎么做:).

如有任何帮助,我们将不胜感激!

当前处理这种情况的代码:

<PropertyGroup >
    <HarvestFolder Condition="$(registry:...\...\...\@Key) == 'Value1'">C:\WiX\Folder1</HarvestFolder>
    <HarvestFolder Condition="$(registry:...\...\...\@Key) != 'Value1'">C:\WiX\Folder2</HarvestFolder>
    <DefineConstants>HarvestPath=$(HarvestFolder)</DefineConstants>
  </PropertyGroup>
<Target Name="BeforeBuild">
    <HeatDirectory 
    Directory="$(HarvestFolder)" 
    PreprocessorVariable="var.HarvestPath" 
...
/>

在.wxs内尝试:

    <Property Id="REGISTRY_VALUE" Secure="yes">
    <RegistrySearch Id="RegistrySearchId"
                    Root="HKLM"
                    Key="..\..\...@key"
                    Name="InstallType"
                    Type="raw" />
</Property>

<SetProperty Id="REGKEYVALUE" Value="[REGISTRY_VALUE]" After="AppSearch"/>

<SetProperty Action="Set0" Id="NEWSOURCEPATH" After="AppSearch" Value="value1"><![CDATA[REGKEYVALUE ='#1']]></SetProperty>
<SetProperty Action="Set1" Id="NEWSOURCEPATH" After="AppSearch" Value="value2"><![CDATA[REGKEYVALUE != '#1']]></SetProperty>

<Feature Id="ProductFeature" Title="MyInstaller" Level="1" >
    <!-- Reference the components here -->
    <?if [NEWSOURCEPATH] == "value1"?>
        <ComponentGroupRef Id="HeatGenerated" />
<?endif?>

    <?if [NEWSOURCEPATH] != 'value1'?>
    <ComponentGroupRef Id="HeatGenerated2" />
    <?endif?>
    
</Feature>
installation wix heat
1个回答
0
投票

<? ?>
语法定义预处理指令。当编译器加载源代码时,将评估预处理指令。这意味着构建不会在条件为 false 的
< if?>
中包含任何代码。此外,预处理指令对预处理器变量进行操作,例如您在
<DefineConstants>
MSBuild 属性中定义的变量。这些都不会让您更接近目标。

相反,您希望使用安装时间条件来评估注册表搜索的结果。功能和组件都可以按照您想要的方式进行调节。

我忘记了它到底在哪一集,但是 部署 Dojo S1:E8 - 变量端到端 - 将它们全部放在 WiX v4 中可能会让您接触到必要的构造......如果没有,则有一个集那里解释了概念。

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