3

我对刻录内置变量 WixBundleProviderKey 有疑问。我需要将此变量的值传递给 msi 包。我的问题是这个变量的值没有被评估,并且 msi 只会收到一个空字符串。我已经用其他内置变量进行了测试,它按预期工作。

任何想法为什么这不起作用?有解决方法吗?

例子:

<Fragment>
    <PackageGroup Id="Test" >
        <MsiPackage Id="Test" 
            DisplayName="Test 4.10.0002"
            DisplayInternalUI="no"
            Visible="no"
            SourceFile=".\Template\ProductsToInstall\Test\Test 4.10.msi"
            Name="Test\Test 4.10.msi"
            Cache="yes"
            CacheId="Test 4.10"
            Compressed="no"
            Vital="yes"
            Permanent="no">

            <MsiProperty Name="BURN_WIXBUNDLEORIGINALSOURCE" Value="[WixBundleOriginalSource]" />
            <MsiProperty Name="BURN_COMMONAPPDATAFOLDER" Value="[CommonAppDataFolder]" />
            <MsiProperty Name="BURN_WIXBUNDLEPROVIDERKEY" Value="[WixBundleProviderKey]" />
        </MsiPackage>
    </PackageGroup>
</Fragment>

提前致谢

4

4 回答 4

1

这是一个应该在 v3.10 中修复的错误:http ://wixtoolset.org/issues/4630/

于 2015-03-27T00:34:55.580 回答
0

不完全是问题的答案,但也许有帮助。在我的情况下,我需要将WixBundleProviderKey变量的值传递给 msi 以获得我的 BundeSetup.exe 的完整路径,该路径缓存在“CommonAppDataFolder\Package Cache\WixBundleProviderKey”目录中。为此,我在 msi 中使用FileSearch元素创建了一个属性,提供了搜索文件的完整路径。

<Property Id="BUNDLECACHEPATH">
  <DirectorySearch Id="BundleDirSearch" Path="[CommonAppDataFolder]Package Cache" Depth="1">
    <FileSearch Name="BundleSetup.exe" />
  </DirectorySearch>
</Property>
于 2013-11-27T13:14:01.300 回答
0

试试这个技巧。您可以创建名称为“BUNDLE_KEY”的新变量(例如)

<Variable Name="BUNDLE_KEY" Type="string" Value="[WixBundleProviderKey]" />

然后将此变量应用于 MsiProperty:

 <MsiProperty Name="YOU_PROPERTY_IN_MSI" Value="[BUNDLE_KEY]" />

我希望它会帮助你。

于 2013-11-30T15:21:09.330 回答
0

似乎在标准引导程序应用程序中传递WixBundleProviderKey值的唯一方法是通过InstallFolder变量传递它:

<Variable Name="InstallFolder" Value="[WixBundleProviderKey]" />

另一种解决方案是通过DirectorySearch元素变量将其传递到捆绑设置临时文件的路径中:

<util:DirectorySearch Path="[TempFolder][WixBundleProviderKey]" Variable="KeyPath" />

<MsiProperty Name="BUNDLE_KEY" Value="[KeyPath]" />

从 [BUNDE_KEY] 属性值获取 msi 中的 WixBundleProviderKey 的方法使用String.Substring()方法实现C# 自定义操作。并将其放在AppSearch事件之前的InstallUISequence中 - 如果您想在RegistrySearch元素中使用获得的值。

于 2014-01-09T16:05:01.733 回答