У меня есть небольшое приложение, которое является одним исполняемым. Для контекста он развертывается на компьютерах с тонким клиентом и запускается автоматически при загрузке. Пользователи не имеют права закрыть это приложение.Освободите файл .exe моей программы, чтобы его можно было перезаписать во время выполнения
Однако мне нужно, чтобы приложение было легко обновляться. Я не могу написать свое программное обеспечение для выполнения любой процедуры автоматического обновления, потому что на этих станциях часто есть блокировщик записи *, который должен быть отключен заранее.
Простейшим решением в качестве администратора является копирование нового EXE поверх старого с использованием различных инструментов, предоставляемых тонким клиентом, или групповой политики/сценариев, где это необходимо. Обновление не должно быть мгновенно эффективным - следующая перезагрузка в порядке.
Проблема в том, что, конечно, исполняемый файл используется и не может быть перезаписан. Каков наилучший способ, чтобы это произошло? Загрузите программное обеспечение полностью в память и запустите оттуда? Сделайте какую-то рутину, которая копирует exe во временную папку, а затем выполняет ее с помощью командной строки, поэтому она не бесконечно петляет?
* Возможно, это вызвало некоторую путаницу. Это Windows XP/Windows 7 Embedded. По большей части они работают как обычные компьютеры, за исключением того, что записи в файловой системе прозрачно перенаправляются на диск кэша. При перезагрузке все изменения полностью возвращаются. Нормальный сценарий для обновления машины будет идти что-то вроде:
Disable Write Blocker
Reboot Machine
Copy Files
Reboot Machine
Enable Write Blocker
Reboot Machine
Однако мое приложение будет запускаться автоматически после каждой перезагрузки, как нет механизма для информирования его. Таким образом, при запуске скриптов исполняемый файл все еще используется.
Единственный способ сделать это - «теневая копия». Файлы исполняемых файлов в Windows * не могут быть выпущены как таковые. Существуют также инструменты для «копирования [или удаления] при перезагрузке», что, возможно, стоит изучить. – user2246674
@ user2246674 Что вы подразумеваете под теневой копией? Вы имеете в виду использование Windows VSS? Если это так, я не могу полагаться на то, что это происходит. Как ваш второй пункт, я должен сделать свое приложение полностью прозрачным в этом отношении. – Dan
Существуют все типы функций автоматического обновления для программного обеспечения Windows. Почему бы не взглянуть на некоторые из них? Не изобретайте велосипед в качестве трапеции. –