переименовать запущенное приложение - опасно? - PullRequest
2 голосов
/ 28 апреля 2011

Я пишу небольшую утилиту для обновления нашего приложения.

Чтобы обновить утилиту обновления, я бы хотел, чтобы она переименовывала себя во время работы и копировала новую версию из удаленного источника.Поэтому при следующем запуске средства обновления у вас будет новая версия.

Известны ли вам какие-либо возможные проблемы, которые могут возникнуть при использовании этого механизма?

На самом деле ябыл удивлен, что вообще возможно переименовать работающую программу (потерял торт ...), в то время как удаление не разрешено.

С уважением к любым подсказкам

, используя Win XP,.NET 3.5

Ответы [ 2 ]

5 голосов
/ 28 апреля 2011

Вы можете переименовать - потому что это изменяет только метаданные, но фактическая цепочка размещения файлов не изменяется, что означает, что они могут оставаться отображенными в памяти в процессе (ах), который их использует.

Это вездесущий трюк в установщиках, когда им приходится обновлять «живые» исполняемые файлы.

Это может вызвать проблемы, если приложение попытается позже повторно открыть исходную спецификацию файлов. Это не то, что регулярно происходит с исполняемыми файлами или библиотеками, хотя вы должны знать о встроенных ресурсах и программах, которые могут выполнять некоторую самосертификацию (проверку лицензии). Обычно лучше перезапустить соответствующее приложение раньше, чем позже, подобно тому, как Windows побудит вас перезагрузиться при обновлении системы

1 голос
/ 28 апреля 2011

Переименование .exe обычно возможно без каких-либо проблем - переименование .dll - это совсем другая история.

Я бы предложил вместо этого использовать подкаталоги (помеченные датой или номером версии) и создать небольшое приложение запуска (с тем же именем и значком, что и у вашего «реального» приложения), которое считывает текущую версию из текстового файла и запускает это.

т.е.

updater.exe (the launcher)
updater.config (containing /updater_v_02/updater.exe)
 /updater_v_01/updater.exe (the real app, v 01)
 /updater_v_02/updater.exe (the real app, v 02)

Таким образом, вы можете

  • держите несколько версий вашего приложения вокруг
  • протестируйте новую версию (запустив ее непосредственно из поддиректора), пока ваши пользователи продолжают использовать старую версию
  • переключение DLL и т. Д. Без каких-либо хлопот
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...