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 在哪里!按照我的建议做复制文件。
我尝试在我的项目中搜索文件。问题是我使用 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 在哪里!按照我的建议做复制文件。