Wix:将数据从ProgramFilesFolder移动到ProgramData

时间:2012-11-21 18:00:18

标签: c# wix windows-installer program-files

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

你能帮忙选择最佳方式吗?

所述方法有任何缺点或风险吗?

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我会通过WIX控制所有内容,因为您可以设置属性和条件以在安装过程中获得所需的行为。

我建议你从这里开始Checking for oldies

您需要在CA中执行的更改是根据找到的版本移动文件。

如果需要更大的改变,请看这个 Replacing Ourselves

HTH