2010-12-01 71 views
0

我正在编写一些代码来通过从ftp站点获取新的dll,根据清单文件来更新应用程序,也在ftp站点上,该站点指定了每个dll的版本。基本的想法是,一个更新程序在启动时运行,它检查FTP站点上的清单,下载比应用程序当前使用的DLL更新的DLL,然后启动应用程序并关闭它。ftp站点的本地/远程访问同步

这导致了以下问题,我不知道最好的处理方式:假设我想在ftp站点上放一个新的dll,但同时一个更新应用程序实例试图读取DLL。如果我删除dll,然后复制新的dll,updater可能看不到该文件,即使清单说明它应该在那里。

我有一种标记文件的想法,它将作为一个同步对象,其存在我和更新实例可以用作锁,但不仅仅是移动问题?在检查锁是否存在以及锁定其他人可以锁定并开始修改ftp文件之间还有一段时间。另外,如果某些更新程序在删除标记之前崩溃,则无法判断是否应删除剩余标记。

编辑:我还看到了一个建议,将文件上传到另一个文件夹,然后重命名该文件夹,因为重命名应该是ftp中的原子操作,但是可以将该文件夹重命名为现有的文件夹?不应该先删除现有的文件夹,从而导致同样的问题?

有没有解决这个问题的标准方法?

回答

1

这个怎么样:在FTP服务器上,在文件名中包含版本信息。在客户端上,下载后重命名文件。

+0

谢谢。我认为它可以工作。由于清单指定要使用哪个dll版本,因此在同一时间创建两个dll版本并没有什么坏处。一旦新的DLL被上传,我复制新的清单到网站。在版本之间的重叠中,客户必须弄清楚哪个是最新的清单版本,但这当然是可行的。我想,我会坚持一些简单的事情,但如果没有其他答案来临,我会接受这个。 – Boris 2010-12-03 15:31:19