Чтобы программа буквально удаляла себя без следа, вам нужно попросить, по крайней мере, кого-то еще удалить ваш (последний) исполняемый файл после его закрытия. Это связано с тем, что будет использоваться работающий исполняемый файл, и вы получите нарушение совместного доступа, если удалите его из кода, который выполняется.
Вы могли бы использовать Windows для этого, я думаю, используя параметр реестра командной строки для запуска при запуске Windows. Вы можете поместить `delete [полный путь к вашему исполняемому файлу] 'туда. (Google для правильной настройки реестра, если вам действительно это нужно.)
Другим хорошим вариантом, по-видимому, является первая ссылка в ответе Aamir
: непосредственно перед выходом из исполняемого файла вы запускаете другой процесс, использующий части Windows, чтобы немного подождать, а затем удаляете свой исполняемый файл.
Еще один вариант - убедиться, что у вас есть правильный установочный пакет (например, пакет MSI), который делает то, что вы хотите, используя подсистему установщика (например, MS Installer) ОС, в которой вы находитесь (например, Windows). Но это работает, только если ваше приложение имеет / нуждается в полном инсталляторе вообще.
Это будет работать так: когда пользователь удаляет программу, пусть ваши установочные пакеты убедитесь, что исполняемый файл приложения в данный момент не запущен. Он может показать пользователю, что он есть, и попросить закрыть приложение, прежде чем продолжить, или он может завершить свой процесс после подтверждения. После этого он может удалить все файлы, которые были установлены пакетом, включая исполняемый файл.
В VB.NET/C# в VisualStudio вы можете использовать класс Custom Installer для добавления логики «убедитесь, что мой исполняемый файл не запущен». Или используйте сторонний инструмент установки, чтобы создать пакет установки, который может сделать это автоматически.