Безопасно ли копировать dll, которая используется запущенным процессом в Windows XP? - PullRequest
2 голосов
/ 01 января 2009

Это в Windows XP.

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

Ответы [ 4 ]

7 голосов
/ 01 января 2009

Вы не должны иметь возможность копировать dll, которая используется запущенным процессом. Для того, чтобы заменить dll, он должен быть помечен для удаления и заменен при следующей перезагрузке. Если вы хотите сделать это вручную, вам нужно будет остановить процесс.

Если вы можете скопировать его - тогда dll не используется, как вы подозреваете, если он запаздывает, то вы могли бы скопировать его во время, когда процесс не блокируется активно - и, если внутренняя часть dll не оказывает какого-либо негативного влияния на активный процесс, все должно быть в порядке.

Конечно, ничего не зная ни о рассматриваемой dll, ни о внутренностях, ни о стандартах программирования, использованных при разработке dll - я не смог бы сказать, так или иначе.

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

3 голосов
/ 01 января 2009

Поведение всегда будет зависеть от процесса. Некоторые процессы берут теневые копии, некоторые блокируют DLL, другие загружают в память и забывают о файловой системе до следующей загрузки.

Даже если вы можете перезаписать библиотеку DLL, процесс вряд ли будет реагировать на изменения, пока не будет перезапущен. Может быть, он перезагрузится автоматически. (IIS, работающий с приложением ASP.NET, является примером этого). Вам просто нужно попробовать.

Возможно, никогда не рекомендуется.

1 голос
/ 01 января 2009

Я считаю, что DLL будет оставаться открытой во время использования, и, следовательно, вы не сможете писать в нее.

0 голосов
/ 01 января 2009

Как правило, вам следует избегать этой практики. Хотя теоретически это может работать, особенно если вы управляете длительным процессом и обеими библиотеками DLL и можете гарантировать, что это больше никому не нужно, Windows действительно не любит делать подобные вещи.

Я рекомендую прочитать недавний ноябрь 2008 года Рэймонда Чена в Technet (" Windows может, но не будет ") для получения дополнительной информации о том, почему это обычно не очень хорошая практика, и, кстати, почему перезагрузки часто требуется от установщиков приложения.

...