2

我们开发 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 相同的使用“旧”和“新”版本的逻辑。所以我们只能使用通用逻辑,例如,如果新位置存在文件,则使用新位置的文件,否则检查旧位置中是否存在文件,然后将其移动到新位置,如果文件都存在于两者中 - 忽略来自的文件旧位置,只需使用新位置中的文件。

你能帮忙选择最好的方法吗?

所描述的方法有任何缺点\风险吗?

有更好的解决方案吗?

4

1 回答 1

1

我将通过 WIX 控制一切,因为您可以设置属性和条件来在安装过程中获得所需的行为。

我建议你从这里开始检查老歌

您需要在 CA 中进行的更改是移动或不移动文件,具体取决于找到的版本。

如果需要更大的改变,请查看 替换我们自己

高温高压

于 2012-11-22T15:24:59.813 回答