2013-06-24 93 views
2

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

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

例子:

<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

不完全是这个问题的答案,但也许它帮助。 在我来说,我需要传递的值WixBundleProviderKey变量微星去我BundeSetup.exe,这是在“COMMONAPPDATAFOLDER \包缓存\ WixBundleProviderKey”目录缓存的完整路径。为此,我在msi中创建了一个FileSearch元素的属性,提供搜索文件的完整路径。

<Property Id="BUNDLECACHEPATH"> 
    <DirectorySearch Id="BundleDirSearch" Path="[CommonAppDataFolder]Package Cache" Depth="1"> 
    <FileSearch Name="BundleSetup.exe" /> 
    </DirectorySearch> 
</Property> 
+0

没有太多有效的解决方案,”。看到我的另一个答案。 – snapsh0t

0

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

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

然后这个变量适用于MsiProperty:

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

我希望这会帮助你。

0

好像只有这样才能在标准引导程序的应用通过WixBundleProviderKey值是通过它通过InstallFolder变量:

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

另一个解决方案是将它传递路径内的束设置

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

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

方式吨:通过DirectorySearch元件变量temp文件o得到WixBundleProviderKey在你的msi中从[BUNDE_KEY]属性值实现C#自定义动作使用String.Substring()方法。并把它放在InstallUISequence之前AppSearch事件 - 如果你想使用RegistrySearch元素中获得的值。