2017-04-25 72 views
0

我们使用Innosetup安装程序将我们的二进制文件和INI文件安装到系统中。 升级时,我们只需删除现有的二进制文件并安装新的二进制文件。 但是,它与INI文件有点不同,因为用户可以编辑ini文件值,并且我们希望保留该更改。在我们安装一个更新的ini文件之前,我们将现有的ini文件复制到名称后附上_copy,删除原始的ini文件,安装带默认值的新ini文件,然后读入_copy ini文件并使用(Section,key )。人们如何管理生产系统中的ini文件?

---该系统工作正常,直到我们决定重命名键或更改节名。然后我们必须有安装后更新ini文件的脚本。

从长远来看,我目前看到的问题是如果用户想从1.0.1更新到1.0.9,我们该如何处理? 强制他们运行每个安装程序从1.0.1到1.0.9? 构建迁移工具?有人目前正​​在使用哪种策略?

回答

1

这适用于数据库以及任何版本化的结构化数据。 您需要决定是否支持迁移,如果您确实需要,则可以创建迁移脚本或在每个版本之间使用的实用程序。而版本的意思是每个版本都改变特定用户数据资源的数据模式。将每个迁移分开,然后逐个迁移。所以如果您必须跨4个版本进行迁移,然后从1-> 2 2-> 3 3-> 4进行迁移。隔离即将迁移到迁移库中的代码。在某些时候,您必须决定哪些版本支持迁移。如果您决定停止支持迁移路径,那么他们可能需要先安装旧版本。基本上,我会提供迁移,但对您支持的内容合理。

如果可能,请保留原始用户数据的备份并将其保留给用户以删除它。这种手动回滚或升级仍然是可能的。

所有这些都是假设更多的企业产品与销售工程师或至少与客户有更直接的关系,因为这是我唯一的经验。如果您的产品用于大众消费,那么支持传统ini并保留用户数据可能会更智能。我期望像YAML/JSON或数据库这样的结构化数据具有需要迁移的模式更新,但像INI文件这样简单的应用可以很容易地支持旧版本,因为它只是键/值。

0

用户INI文件是用户唯一的,永远不会改变它。

  • 在应用程序或单独的默认INI文件中具有硬编码的默认值。
  • 如果未找到最新的名称,使应用程序回退到传统密钥名称或节名称。
+0

我想我们不想在处理遗留文件的代码中进行更改,而是在版本升级期间对INI进行编辑。 –

+1

@lukesignh这提醒了我,您应该留下以前版本的备份,并带有时间戳和.bak扩展名,这样如果迁移有任何复杂性,至少他们可以选择手动回滚或升级 – Novaterata