我正在编写一些代码来通过从ftp站点获取新dll来更新应用程序,根据清单文件,也在ftp站点,它指定每个dll的版本。基本思想是,一个updater程序在启动时运行,它检查ftp站点的清单,下载比应用程序当前使用的dll更新的任何dll,然后启动应用程序并自行关闭。
这导致了以下问题,我不确定最好的处理方法:假设我想在ftp站点上放置一个新的dll,但同时updater应用程序实例尝试读取该dll 。如果我删除了dll,然后复制了新的dll,更新程序可能看不到该文件,即使清单显示它应该在那里。
我有一种标记文件的想法,它将充当同步对象,它的存在我和更新程序实例可以用作锁,但这不仅仅是移动问题吗?检查锁是否存在,以及锁定(其他人可以锁定)并开始修改ftp文件之间仍有时间。另外,如果某个更新程序在删除标记之前崩溃,则无法判断是否应删除剩余标记。
编辑:我还看到了将文件上传到另一个文件夹,然后重命名该文件夹的建议,因为重命名应该是ftp中的原子操作,但是可以只将文件夹重命名为现有文件夹?不应该先删除现有文件夹,从而导致同样的问题吗?
有没有一种标准方法可以解决这个问题?
答案 0 :(得分:1)
这个怎么样:在FTP服务器上,在文件名中包含版本信息。在客户端上,下载后重命名该文件。