我有刻录内置变量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>
提前致谢
答案 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 元素中使用获取的值。