无法将WixBundleProviderKey变量传递给msipackage

时间:2013-06-24 07:18:02

标签: wix burn wix3.7 wix3.8

我有刻录内置变量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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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>

答案 2 :(得分:0)

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

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

然后将此变量应用于MsiProperty:

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

我希望它会对你有所帮助。

答案 3 :(得分:0)

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

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

另一个解决方案是通过 DirectorySearch 元素变量将其传递到bundle setup temp文件的路径中:

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

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

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

相关问题