今天我正在调试一个客户远程问题,而不是构建一个全新的安装并发送给他,我只是编译了dll,确保版本信息与他安装的版本信息相同,然后更换旧的dll与我刚刚在他的机器上构建的那个(为了以防万一而支持另一个),一切似乎都工作正常,还有更多详细记录的好处,这是我添加的。
我的问题是:这是修补软件的一般工作原理吗?或者我做了一件非常危险的事情?如果这是不好的方法,将来修补我们的软件修补错误的最佳方法是什么?
答案 0 :(得分:3)
不,这不错 - 实际上,DLL 假定以这种方式工作。只要你没有破坏ABI或API,(你刚刚添加了日志记录,这很酷)你应该能够替换下面的内容并重新启动程序。
此外,从法律角度来看,如果没有这一点,LGPL将无法运作。 (许可证中的条款之一是用户可以用他们构建/提供/查找的库来替换您的库副本。)
您可能正在考虑“使用十六进制编辑器进行修补”,您可以在其中修改二进制文件而无需重新编译它。那更危险。
答案 1 :(得分:3)
修补的想法是修改产品的现有安装。你如何去做:替换文件,应用二进制差异等并不重要。
你的升级方式很好;除了它不可扩展。如果版本信息相同,则由您自行手动跟踪客户已安装的二进制文件,而不是在“关于”对话框中捕获它们。
此外,许多开发商店存档会发送给客户,因此如何存档此配置?
并不是什么大不了的事,但是当你支持更多的客户时,它会变得很痛苦。
答案 2 :(得分:1)
嗯,从技术上讲它可以做到,但实际上你可能会迷失在很多客户中,每个客户都有不同的二进制文件,即使版本号也没有差别。
Morover,如果你正在修复一个bug,可能你应该以某种方式更新所有客户。我认为最好根据应用程序的频繁发布和自我更新功能找到解决方案。
答案 3 :(得分:1)
某些版本号由四部分组成:
主要,次要,构建和修订。
修订版将用于更新修复安全补丁或其他严重问题的产品。 Firefox就是一个例子。
使用您的方法,您似乎没有使用修订版并使用与先前版本相同的主要,次要和内部版本号。添加版本号的修订可以更容易地确定修补了哪个版本的产品。