Luis Bergmann Ответов: 1

Как удалить запущенный exe-файл.


Всем привет
Я знаю, что exe - файл копируется в память и выполняется, если я запускаю exe-файл.
Но почему я не могу удалить exe-файл?

Кто-нибудь может мне объяснить?

ZurdoDev

Потому что он используется. Вот как работает windows.

Sergey Alexandrovich Kryukov

Почему?
—СА

Philippe Mori

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

1 Ответов

Рейтинг:
8

Sergey Alexandrovich Kryukov

Невозможно удалить любой файл, загруженный в память для выполнения. Единственный способ удалить его-это убить процесс, который использует файл, скажем, с помощью TerminateProcess:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686714%28v=vs.85%29.aspx[^].

Но будьте осторожны: если у вас есть необходимость удалить такой файл, это довольно определенный признак того, что какое-то злоупотребление. Если вам действительно нужно удалить файл, который является исполняемым модулем, используемым каким-то приложением, и вы не можете этого сделать, это означает, что в приложении есть некоторые ошибки, которые вы должны исправить. Или приложение не предназначено для завершения работы в этот момент, поэтому вы не должны удалять ни один файл, который оно использует. И так далее…

[РЕДАКТИРОВАТЬ]

Кстати, ваше понимание того, как работает EXE, неверно: "exe-файл копируется в память и выполняется". Если бы вы это сделали, то не смогли бы запустить процесс на основе кода приложения. Применение есть нагруженный важной частью программного обеспечения является погрузчик, который делает ряд сложных вещей. Одна из важных его частей заключается в следующем: на системах, основанных на архитектуре x86 в защищенный режим, вы вообще не можете выполнить ни одного фрагмента кода, загруженного в память в режиме приложения, из-за аппаратного обеспечения предотвращение исполнения; подготовка фрагмента кодовой памяти является одним из режим ядра операции, не разрешенные во внешнем пространстве кольцо.

—СА


BillWoodruff

+5 очень четкое объяснение.