【问题标题】:Not possible to pass WixBundleProviderKey variable to msipackage无法将 WixBundleProviderKey 变量传递给 msipackage
【发布时间】:2013-06-24 07:18:02
【问题描述】:

刻录内置变量 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>

提前致谢

【问题讨论】:

    标签: wix burn wix3.7 wix3.8


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      然后将此变量应用到 MsiProperty:

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

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

        不完全是问题的答案,但也许有帮助。 在我的情况下,我需要将 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>
        

        【讨论】:

        • 效率不高的解决方案,因为用户可以在运行前更改 BundeSetup.exe 的名称。请参阅我的另一个答案。
        【解决方案4】:

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

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

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

        <util:DirectorySearch Path="[TempFolder][WixBundleProviderKey]" Variable="KeyPath" />
        
        <MsiProperty Name="BUNDLE_KEY" Value="[KeyPath]" />
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-02
          • 2015-01-11
          • 2021-08-12
          • 1970-01-01
          相关资源
          最近更新 更多