Wix:在 ResolveSource 之后声明或设置 属性

Wix : Declare or set property after ResolveSource

我尝试在我的项目中搜索文件。问题是我使用 var "SourceDir",它在使用 UI 安装时工作正常,但在静默安装时没有。

我发现这是因为在我尝试以静默模式使用它之前没有设置SourceDir。

这就是为什么我想在 "ResolveSource" 操作后设置我的 属性

<Property Id='CUSTOMCONFIGFILEEXISTS'>
  <DirectorySearch Id='DirSearch' Path='[SOURCEDIR]' Depth='0'>
    <FileSearch Id='FileSearch' Name='EasyFolderApplicationDesktopToolbar.exe.config'/>
  </DirectorySearch>
</Property>

...

  <Component Id="CustomMainExecutableConfig" Guid="A952C40B-0274-4EA8-8A48-0216395455CF" Directory="INSTALLDIR" NeverOverwrite="yes">
    <Condition>CUSTOMCONFIGFILEEXISTS</Condition>
    <CopyFile Id="CustomEasyFolderApplicationDesktopToolbarCONFIG" SourceProperty="CUSTOMCONFIGFILEEXISTS" DestinationProperty="INSTALLDIR"  />
    <!--<CopyFile Id="CustomEasyFolderApplicationDesktopToolbarCONFIG" SourceProperty="CONFIGFILEEXISTS" DestinationProperty="INSTALLDIR"  />-->
  </Component>

我已经试过了,没有结果:

<Property Id='CUSTOMCONFIGFILEEXISTS'>
  <DirectorySearch Id='DirSearch' Path='[Temp]' Depth='0'>
    <FileSearch Id='FileSearch' Name='EasyFolderApplicationDesktopToolbar.exe.config'/>
  </DirectorySearch>
</Property>

<CustomAction Id='SET_CUSTOMCONFIGFILEEXISTS'
          Property='Temp'
          Value='[SourceDir]'/>

...

<InstallExecuteSequence>
  <ResolveSource After="CostInitialize" ></ResolveSource>
  <Custom Action='SET_CUSTOMCONFIGFILEEXISTS' After='ResolveSource'></Custom>
  <Custom Action="AlreadyUpdated" After="FindRelatedProducts">SELFFOUND</Custom>
  <Custom Action="NoDowngrade" After="FindRelatedProducts">NEWERFOUND</Custom>
  <RemoveExistingProducts After="InstallExecute" />
</InstallExecuteSequence>

我已经看到了How do I use the SourceDir MSI property in WiX? 但是我不知道怎么办...

你能帮帮我吗?

该搜索最终是一个 AppSearch,在 WiX 构建的 MSI 中,它是第一个运行的东西,所以你的 'CUSTOMCONFIGFILEEXISTS' 属性 已经被搜索处理过,所以它是错误的该组件导致组件未安装且复制文件未完成的时间。所以失败的原因不是 ResolveSource - 这是因为 'CUSTOMCONFIGFILEEXISTS' 被设置为 false 并且您正在将组件和复制文件设置为 false 条件。

IMO 你想多了。不要为搜索而烦恼。只需选择一个与您要复制的文件相关的组件(不要为它发明一个带有条件的过渡组件)。使用 [SourceDir] 作为源将 CopyFile 添加到该组件。如果文件在那里,它将被复制,如果不存在,则不会。

不要添加无条件的 ResolveSource 操作,因为它会在每次安装程序操作发生时发生(修复、删除功能、修补程序、卸载),这通常是不必要的。无论如何,我确信您不需要 ResolveSource。第一次安装时有一个隐式的 ResolveSource,否则它甚至不知道 MSI 在哪里!按照我的建议做复制文件。