修补程序期间WiX CopyFile /目录路径不可用

时间:2012-06-05 20:08:42

标签: wix patch file-copying

我有一个WiX安装程序(比如10.0)复制一些文件。文件副本的一切工作正常。我正在尝试从该版本创建补丁。每当运行补丁(10.1),并且之前的10.0安装必须复制其中一些文件时,我会在运行repair:时收到以下区域

  

“指定的路径[路径]不可用。”

我已检查过,指定的路径可用。复制到的文件就在那里。此外,还存在从10.0安装中从中复制文件的源数据目录。 还有其他目录可以复制其他文件。我不确定他们是否也会有错误,我还没有看到它。

可能出现什么问题?

这是我的.wxs代码,在原始安装和补丁中都是相同的:                                                                             

<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="SavedDBVDirectory" Guid="xxx">
    <CreateFolder>
      <Permission User ="[WIX_ACCOUNT_ADMINISTRATORS]" GenericAll="yes"/>
      <Permission User ="[WIX_ACCOUNT_USERS]" GenericAll="yes"/>
    </CreateFolder>
  </Component>
</DirectoryRef>

<CustomAction Id="SetOldDBVWFiles"
              Property="OLDDBVWFILES"
              Value="[PATHTOOLDVER]Saved DB Files"/>
<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="CopyOldDataBVFiles" Guid="yyy">
    <CopyFile Id="CopyOldDBVWFiles"
              Delete="yes"
              SourceProperty="OLDDBVWFILES" DestinationProperty="SAVEDDBFOLDER" SourceName="*"/>
    <Condition>
      <![CDATA[(NOT Installed) AND (NOT REMOVE) AND (PREVIOUSVERSION << "8." OR PREVIOUSVERSION << "7.")]]>
    </Condition>
  </Component>
</DirectoryRef>

        <!--This custom action runs in 10.0 install-->
<!--PREVIOUSHYVERSION is set for 10.0; it is not for 10.1-->
<CustomAction Id="SetOldDBVWFilesHy"
              Property="OLDHYDBVWFILES"
              Value="[PATHTOOLDAD]Saved DB Files"/>
<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="CopyOldHyDatabusViewerFiles" Guid="zzz">
    <CopyFile Id="CopyOldHyDBVWFiles"
              Delete="yes"
              SourceProperty="OLDHYDBVWFILES" DestinationProperty="SAVEDDBFOLDER" SourceName="*"/>
    <Condition>
      <![CDATA[(NOT Installed) AND (NOT REMOVE) AND (PREVIOUSHYVERSION << "4.")]]>
    </Condition>
  </Component>
</DirectoryRef>

1 个答案:

答案 0 :(得分:1)

好的,我想出了这个。从日志文件( msiexec / L * V“[日志文件]”),我发现其中一个路径变量 - “ PATHTOOLDAD ,“不,这不是通往爸爸工具的途径 - 没有在补丁中设置。它应该没有关系,因为这个属性仅用于初始安装,而不是在补丁中使用,但必须设置为某些东西。我在msiexec的调用中添加了选项“ PATHTOOLDAD = [无论] ”以设置属性,瞧,它有效。

msiexec / i [ MSP补丁文件] PATHTOOLDAD = [已删除旧程序的路径]