Синхронизация локального / удаленного доступа для FTP-сайта - PullRequest
0 голосов
/ 01 декабря 2010

Я пишу некоторый код для обновления приложения, выбирая новые dll-файлы с ftp-сайта, в соответствии с файлом манифеста, также на ftp-сайте, где указываются версии каждой dll.Основная идея состоит в том, что программа обновления запускается при запуске, которая проверяет манифест на ftp-сайте, загружает любые библиотеки DLL, которые новее, чем используемые в настоящее время приложением, а затем запускает приложение и выключается.

Это приводит к следующей проблеме, которую я не уверен в наилучшем способе обработки: скажем, что я хочу разместить новую DLL на сайте ftp, но в то же время экземпляр приложения обновления пытается прочитать эту DLL.Если я удалю dll, а затем скопирую новую, программа обновления может не увидеть файл, даже если в манифесте сказано, что он должен быть там.

У меня есть идея своего рода файла маркера,это будет действовать как объект синхронизации, и чье существование я и экземпляр средства обновления можем использовать как блокировку, но разве это не просто решение проблемы?Между проверкой наличия блокировки и созданием блокировки все еще остается время, в течение которого кто-то другой может сделать блокировку, и началом изменения файлов ftp.Кроме того, если какой-либо модуль обновления завершает работу перед удалением маркера, невозможно определить, следует ли удалить оставшийся маркер.

Редактировать: я также увидел предложение загрузить файлы в другую папку и затем переименоватьпапка, поскольку переименования должны быть атомарной операцией в ftp, но возможно ли просто переименовать папку в имя существующей папки?Не следует ли сначала удалить существующую папку, вызывая такую ​​же проблему?

Существует ли стандартный подход для решения этой проблемы?

1 Ответ

1 голос
/ 02 декабря 2010

Как насчет этого: На FTP-сервере включите информацию о версии в имя файла.На клиенте переименуйте файл после загрузки.

...