Я пишу некоторый код для обновления приложения, выбирая новые dll-файлы с ftp-сайта, в соответствии с файлом манифеста, также на ftp-сайте, где указываются версии каждой dll.Основная идея состоит в том, что программа обновления запускается при запуске, которая проверяет манифест на ftp-сайте, загружает любые библиотеки DLL, которые новее, чем используемые в настоящее время приложением, а затем запускает приложение и выключается.
Это приводит к следующей проблеме, которую я не уверен в наилучшем способе обработки: скажем, что я хочу разместить новую DLL на сайте ftp, но в то же время экземпляр приложения обновления пытается прочитать эту DLL.Если я удалю dll, а затем скопирую новую, программа обновления может не увидеть файл, даже если в манифесте сказано, что он должен быть там.
У меня есть идея своего рода файла маркера,это будет действовать как объект синхронизации, и чье существование я и экземпляр средства обновления можем использовать как блокировку, но разве это не просто решение проблемы?Между проверкой наличия блокировки и созданием блокировки все еще остается время, в течение которого кто-то другой может сделать блокировку, и началом изменения файлов ftp.Кроме того, если какой-либо модуль обновления завершает работу перед удалением маркера, невозможно определить, следует ли удалить оставшийся маркер.
Редактировать: я также увидел предложение загрузить файлы в другую папку и затем переименоватьпапка, поскольку переименования должны быть атомарной операцией в ftp, но возможно ли просто переименовать папку в имя существующей папки?Не следует ли сначала удалить существующую папку, вызывая такую же проблему?
Существует ли стандартный подход для решения этой проблемы?