Migration 人们如何管理生产系统中的ini文件?

Migration 人们如何管理生产系统中的ini文件?,migration,installation,config,inno-setup,ini,Migration,Installation,Config,Inno Setup,Ini,我们正在使用Innosetup安装程序将二进制文件和INI文件安装到系统上。 升级时,我们只需删除现有的二进制文件并安装新的二进制文件。 但是与INI文件有点不同,因为用户可以编辑INI文件值,我们希望保留该更改。在安装更新的ini文件之前,我们复制现有的ini文件,并在名称后面附加_copy,删除原始ini文件,安装新的默认ini文件,然后读回_copyINI文件,并使用(部分,键)还原值 ---该系统工作正常,直到我们决定重命名键或更改节名。然后我们必须有脚本在安装后更新ini文件 从长远来

我们正在使用Innosetup安装程序将二进制文件和INI文件安装到系统上。 升级时,我们只需删除现有的二进制文件并安装新的二进制文件。 但是与INI文件有点不同,因为用户可以编辑INI文件值,我们希望保留该更改。在安装更新的ini文件之前,我们复制现有的ini文件,并在名称后面附加_copy,删除原始ini文件,安装新的默认ini文件,然后读回_copyINI文件,并使用(部分,键)还原值

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

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

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

如果可能,保留原始用户数据的备份,并由用户自行删除。这样,手动回滚或升级仍然是可能的


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

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

如果可能,保留原始用户数据的备份,并由用户自行删除。这样,手动回滚或升级仍然是可能的


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

用户INI文件是用户的,永远不要更改它

  • 将默认值硬编码到应用程序或单独的默认INI文件中
  • 如果找不到最新的名称,则使应用程序回退到旧密钥名称或节名称

用户INI文件仅供用户使用,切勿更改

  • 将默认值硬编码到应用程序或单独的默认INI文件中
  • 如果找不到最新的名称,则使应用程序回退到旧密钥名称或节名称

我认为我们不想更改代码来处理遗留文件,而是想在版本升级期间对INIs进行编辑。@lukesignh这提醒了我,您应该保留一个带有时间戳和.bak扩展名的以前版本的备份,这样,如果迁移出现任何问题,至少他们可以选择手动回滚或升级。我想我们不想更改代码来处理遗留文件,而是在版本升级期间对INIs进行编辑。@lukesignh这提醒了我,您应该保留一个带有时间戳和.bak扩展名的以前版本的备份,以便在迁移过程中出现任何问题时,至少可以选择手动回滚或升级