如何在WiX刻录中包含可修改的松散文件?

时间:2013-04-26 06:57:55

标签: wix burn

我有一个包含非压缩文件的安装程序包。

<DirectoryRef Id="INSTALLLOCATION">
  <Component Id="LocationConfig">
    <File Id="LocationConfigFile" 
          Source="LooseFile.Config" 
          DiskId="2" 
          Vital="no" 
          Compressed="no" />
  </Component>
</DirectoryRef>

此文件松散的目的是在安装之前进行编辑。这符合要求。

我有一个刻录链,指定松散文件作为松散文件包含在引导程序旁边。另请注意,使用SuppressLooseFilePayloadGeneration允许手动将文件指定为松散的有效负载。

<Chain>
  <MsiPackage SourceFile="MyInstaller.msi" 
              Visible="yes" 
              Vital="no"
              SuppressLooseFilePayloadGeneration="yes">
    <Payload Compressed="no" SourceFile="LooseFile.Config" />
  </MsiPackage>
</Chain>

刻录日志如下所示:

[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Hash mismatch for path: C:\ProgramData\Package Cache\.unverified\payAC32431CF002C09E2F0B537A32ACA259
[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Failed to verify hash of payload: payAC32431CF002C09E2F0B537A32ACA259
[3860:38D8][2013-04-26T16:42:48]e310: Failed to verify payload: payAC32431CF002C09E2F0B537A32ACA259 at path: C:\ProgramData\Package Cache\.unverified\payAC32431CF002C09E2F0B537A32ACA259, error: 0x80091007. Deleting file.
[3860:38D8][2013-04-26T16:42:48]e000: Error 0x80091007: Failed to cache payload: payAC32431CF002C09E2F0B537A32ACA259
[33FC:3A54][2013-04-26T16:42:48]e314: Failed to cache payload: payAC32431CF002C09E2F0B537A32ACA259 from working path: C:\Users\Snixtor\AppData\Local\Temp\{c887e0cf-5038-4e15-95b1-8510d8c96b88}\payAC32431CF002C09E2F0B537A32ACA259, error: 0x80091007.

好的,哈希失败了,因为文件已经改变了。但是......我想允许用户更改文件。我可以用一个标准的安装程序包来做到这一点,所以我必须跳过什么来让它与引导程序一起运行?

我在WiX用户邮件列表中找到了this discussion。 Robs对“它应该正常工作”的回应听起来很有希望,但随后讨论似乎继续暗示它可能是一个错误?如果作者曾提出错误报告,我找不到它。

我考虑的另一种方法是从引导程序有效负载中完全排除该文件,然后在安装期间手动将其复制到MSI缓存路径,以便MSI可以找到它,尽管刻录将永远不会尝试验证它。但我看到的两个问题是:

  1. 我无法找到如何从我的引导程序中发现缓存路径。
  2. 即使我知道路径,我也需要提升引导程序来复制文件。这可能不是一个表明,但我有一种潜在的怀疑,这可能会很难。

2 个答案:

答案 0 :(得分:5)

今天不支持。出于安全原因,Burn会在将所有内容放入缓存之前对其进行验证。您可以做的是在自定义Bootstrapper Application中读取外部文件,并将结果存储为持久Variables。这将是更多的工作,但Burn只是不会信任与构建时插入的安全哈希/签名不匹配的文件。

答案 1 :(得分:2)

我通过挂掉刻录引导程序设置的当前目录属性并将其与copyfile元素一起使用来解决同样的问题:

  <Component Id="SettingsFile" Guid="...">
    <CopyFile Id="Copy" Delete="no" DestinationDirectory="INSTALLFOLDER" SourceName="LooseSettings.xml" SourceProperty="CURRENTDIRECTORY" />
    <RemoveFile Id="Remove" On="uninstall" Directory="INSTALLFOLDER" Name="LooseSettings.xml" />
  </Component>

它可能存在一些问题,但我将安装程序写入其他人的规格并且似乎有效