Wix组件赢得';补丁时不会更新

Wix组件赢得';补丁时不会更新,wix,windows-installer,patch,Wix,Windows Installer,Patch,我正在创建一个补丁来更新我的MSI内置WiX。我有一个组件,它只有一个处理所有数据库更改的sqlupdatescript 当我需要更新数据库时,我会在该组件中添加另一个sqlscript。问题是,如果我创建的补丁在该组件中只添加了一个sqlscript,那么该补丁将不会做任何事情。如果我在一个文件中做了更改(在相同的功能中),sqlscript也会运行 这是WiX中的预期行为吗?Windows Installer通过标记为KeyPath的资源中的更改来检测更改。例如,它可以是文件或注册表项。我假

我正在创建一个补丁来更新我的MSI内置WiX。我有一个组件,它只有一个处理所有数据库更改的
sqlupdatescript

当我需要更新数据库时,我会在该组件中添加另一个
sqlscript
。问题是,如果我创建的补丁在该组件中只添加了一个
sqlscript
,那么该补丁将不会做任何事情。如果我在一个文件中做了更改(在相同的功能中),
sqlscript
也会运行


这是WiX中的预期行为吗?

Windows Installer通过标记为
KeyPath
的资源中的更改来检测更改。例如,它可以是文件或注册表项。我假设您的组件包含一个文件,这会自动使其成为关键路径。因此,当您仅更改一个脚本时,文件不会更改,Windows Installer也不知道某些内容已更改。否则,它将正确检测更改并应用修补程序。

事实上,我的组件根本不包含任何文件。只有sqlscripts。你是说用“keyfile”标记它会让wix看到变化吗?或者我必须添加一个伪文件,每次我只想运行脚本时都会更新它吗?如果它不是密钥路径项,那么是的,它不会被检测为已更改,这就是为什么最佳做法是让每个组件都有一个资源,标记为密钥。更改非关键路径的脚本不会被检测为已更改的内容。在补丁中更改关键路径关系是不明智的,所以在进行重大升级之前不要更改它。