Каков наилучший способ закрыть приложение WinNet .Net и удалить исполняемый файл - PullRequest
1 голос
/ 11 февраля 2009

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

Ответы [ 4 ]

2 голосов
/ 11 февраля 2009

MoveFileEx будет работать до тех пор, пока вы не используете Windows 95/98 / ME (надеюсь, что нет ...). Но вы не можете удалить папку, в которой находился ваш exe. Если это не проблема, следуйте совету Райана.

Эта статья описывает практически все, что вы хотите.

2 голосов
/ 11 февраля 2009

Существуют утилиты PendMoves и MoveFile от sysinternals . Согласно документации, вы можете использовать файл перемещения для удаления файла при следующей загрузке, указав пустое место назначения:

movefile your.exe ""

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

Утилита использует MoveFileEx API , поэтому при желании вы можете использовать этот API для достижения того же эффекта.

1 голос
/ 11 февраля 2009

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

  • Указание MoveFileEx отложить удаление до следующей перезагрузки - один из подходов, обычно используемых при установке / удалении кода.
  • Используйте Task Scheduler , чтобы запланировать cmd.exe /c del c:\path\myprog.exe для запуска через 60 секунд, затем быстро завершите работу, чтобы иметь шанс на успех.
  • Пакетный файл работает хорошо и может фактически удалить себя, потому что пакетный файл закрыт между строками.

Если вы используете метод пакетного файла, рассмотрите что-то вроде следующего:

:loop
ping -n 6 127.0.0.1
del /y %1
if exist %1 goto :loop
del byebye.bat

Команда ping здесь используется для вставки задержки, поскольку sleep не является стандартной командой в Windows. Цикл позволяет пакетному процессу выжидать время, пока он не сможет фактически удалить исполняемый файл.

0 голосов
/ 11 февраля 2009

Возможные подходы

  1. Запустить скрипт для удаления приложения при выходе, хотя это может привести к тому, что скрипт будет лежать в районе

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

...