Подтвердить что ты не робот

Как программа может удалить свой собственный исполняемый файл

Есть ли способ, которым выполняемый процесс может удалить свой собственный исполняемый файл?

Например, я создаю консольное приложение (single exe), и после выполнения некоторых задач он каким-то образом удаляет exe файл.

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

В любом случае, в Windows

4b9b3361

Ответ 1

Один из способов сделать это - использовать функцию MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT и адресатом NULL. Согласно документации, это:

регистрирует файл lpExistingFileName, который должен быть удален при перезапуске системы. Если lpExistingFileName ссылается на каталог, система удаляет каталог при перезапуске, только если каталог пуст.

Ответ 2

process.start("cmd /c ping localhost -n 3 > nul & del filepath")
exit

заменить process.start любой командой, которую использует ваш язык программирования для запуска программ с аргументами

заменить путь к файлу путь к exe

заменить exit командой для завершения вашей программы

Ответ 3

Это можно сделать в Linux. Вы обнаружите, что вообще невозможно удалить исполняемый файл в Windows. Однако вы можете удалить Windows EXE для следующей перезагрузки: http://www.howtodothings.com/computers/a1402-delete-a-running-exe.html

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

Ответ 5

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

Ответ 6

Пока этот exe не будет в памяти, он не сможет удалить себя. Тем не менее, он может зарегистрировать в системе задачу по удалению себя после заданного промежутка времени, когда ожидается, что он завершит выполнение.

Ответ 7

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

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

 Sub del()
    Dim file As System.IO.StreamWriter
    file = My.Computer.FileSystem.OpenTextFileWriter("del.bat", True)
    file.WriteLine("")
    file.WriteLine("timeout 1")
    file.WriteLine("echo Y | del *.*")
    file.Close()
    Process.Start("del.bat")
    Me.Close()
End Sub