Удаление запущенного .exe с помощью потоков NTFS

    Про потоки NTFS на хабре писали уже не раз, я же покажу, как с их помощью преодолеть одно ограничение Windows по работе с процессами. Тут эта тема в одном посте уже поднималась, но как-то вскользь. Я же хочу обратить на неё внимание.

    Вы наверное знаете, что .exe файл работающего процесса невозможно удалить, пока он работает. Можно перемещать файл, но только в пределах своего раздела. С помощью потоков NTFS всё таки можно удалить файл процесса во время его работы.

    Делается это буквально тремя строчками в командной строке.
    Запускаете cmd.exe, переходите в каталог на NTFS-раздел.

    type %windir%\system32\notepad.exe > zz:notepad.exe
    start E:\tmp\zz:notepad.exe
    del zz


    Первая строчка копирует Блокнот на NTFS раздел в виде потока «notepad.exe» файла zz. Пустой файл zz создастся автоматически.
    Вторая строчка запускает этот поток на выполнение, как если бы это был обычный .exe файл.
    Третья строчка удаляет пустой файл zz, а вместе с ним исчезают и его потоки

    Процесс остаётся работать. Можете запустить taskmgr.exe и полюбоваться на продолжающий работать процесс zz:notepad.exe.

    Практическое применение этого? Например, в инсталляторах. Они любят оставлять во временных файлах кучу exe-шников. Инсталляторы могли бы запускать свои исполняемые файлы таким вот образом, тогда с удалением временных .exe файлов не будет проблем.

    Программа для работы с альтернативными файловыми потоками NTFS.

    Средняя зарплата в IT

    110 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 8 355 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 6

      0
      Попробовал на Windows XP — все работает прекрасно
      На Windows 7 выдает ошибку:

      [Window Title]
      C:\zz:notepad.exe
       
      [Content]
      Windows cannot find 'C:\zz:notepad.exe'. Make sure you typed the name correctly, and then try again.
       
      [OK]

      вывод утрачивается «кроссплатформенность» метода
      Может есть еще вариант чтобы работало и на Windows 7?

      Но и на том что есть большое спасибо, найду этому применение в онлайн апдейте программы
        0
        Может нет прав записи на c:\?
          0
          права точно есть, и появился файл zz
          0
          Ну как бы это может быть связано, допустим, с реализацией шелл-команды start в Windows7. Не думаю, что сама возможность запускать поток как процесс была убрана. То есть надо поэкспериментировать, написать небольшую программку, которая будет запускать поток через API-функцию CreateProcess(). Наверняка всё получится.

          А в Windows XP команда start, например, не запускает поток на выполнение, если в названии потока нет ".exe", хотя поток и не обязательно должен называться именно так. Он может вообще как угодно называться и быть тем не менее запущен.
            0
            Вы совершенно правы :)
            через CreateProcess() все работает
            если бы я мог то отплатил бы вам за информацию кармой!
            спасибо
              0
              отплатил за вас кармой =)

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

        Самое читаемое