我们开发 C# 应用程序并通过 Wix 将其打包成可以安装的 MSI 文件。应用程序可执行文件和 .dll 文件安装到ProgramFilesFolder中的标准位置。
启动时应用程序创建本地 .sdf 文件(数据库),如果它不存在。
当我们卸载(例如作为升级到较新版本的一部分)时,所有内容都会被删除,除了这个 .sdf 文件。当我们安装较新版本时,它会拾取旧的 .sdf 文件并继续使用它。
现在的问题是 .sdf 文件当前也位于ProgramFilesFolder下。我们不想“将旅行行李存放在发动机舱中”,因此我们将这个 .sdf 文件移动到ProgramData中。
因此,我们将在应用程序代码中进行此更改 - 在不同的路径中使用 .sdf 文件。下次升级时,我们需要将现有的 .sdf 文件从ProgramFilesFolder移动到ProgramData。
问题 - 移动此文件的理想方法是什么?
1)在 Wix 设置代码中 - 识别是否从“旧”版本(比我们更改 .sdf 文件位置的版本更旧)升级到“新”(更新或等于更改),在这种情况下移动文件。这里的好处是 Wix“知道”所有版本号,并且可以根据它们有条件地进行移动。
2)在 C# 应用程序代码中 - 与在 Wix 中编写 CustomAction 相比,它可能更简单。但是应用程序代码对版本一无所知,因此我们不能使用与 Wix 相同的使用“旧”和“新”版本的逻辑。所以我们只能使用通用逻辑,例如,如果新位置存在文件,则使用新位置的文件,否则检查旧位置中是否存在文件,然后将其移动到新位置,如果文件都存在于两者中 - 忽略来自的文件旧位置,只需使用新位置中的文件。
你能帮忙选择最好的方法吗?
所描述的方法有任何缺点\风险吗?
有更好的解决方案吗?