如何使用较新版本升级/更新C应用程序

时间:2011-11-18 11:02:41

标签: c gcc

我的应用程序在C中。我必须在我的应用程序中添加一项功能,以便它能够根据最新版本自行升级。更具体地说,它应该识别是否找到任何更新的版本并使用更新的版本进行更新(根据 新的可执行文件)。可能存在类似数据库模式的情况可能会在较新版本中更改。那么我可以在代码中提供哪些条款,以便它可以识别新的可执行文件并根据它自行升级?

平台:linux,gcc编译器

2 个答案:

答案 0 :(得分:1)

如何简单地覆盖自己的可执行文件,然后使用fork创建新进程并exec新的可执行文件?

然而,正如已经指出的那样,这不是非常安全或可靠。一个更好的解决方案可能是程序检查安装程序的特殊位置,最好是已签名,下载并运行。此安装程序不得不要求用户自行安装。很像Windows上的Firefox更新。

答案 1 :(得分:1)

因此,您可以按照@Joachim和@awoodland上面的建议更新您的二进制文件。虽然两者都有效,但我会谨慎行事,只需让你的包管理工具来完成驴工作。原因是安全性,更关键的是解决依赖关系。不幸的是,这需要你维护包,但是考虑到你可能可以使用deb文件和rpm文件来覆盖绝大多数,这不是什么大事。

在数据库升级方面,创建一个备份数据库的SQL脚本和一个(或一个系列)来更新它(添加相应的字段等)。

让您的脚本创建一个数据库版本表,其中包含版本号升级的日期和时间以及执行升级的软件版本号以及是否成功(您认为有用的任何内容。还要确保它插入一个每次升级时都会进入您的版本表。

启动二进制程序时,请根据预期的db版本检查最大版本号,以确保二进制文件与数据库版本升级兼容。

进一步扩展这一点,您可以通过循环一组升级脚本在不同版本之间进行升级。如果你想让它们保持安全(r)不被窥探,你应该将这些作为嵌入式资源保留,但这可以解决你的问题。

希望这有帮助,我还没有喝咖啡,但它可能指向一个解决方案。更进一步,你还可以创建一个升级日志表来记录升级的进展情况以及是否遇到任何问题,以帮助那些希望永远不会发生的情况。