Почему SYSTEM продолжает блокировать дескрипторы исполняемых файлов после выхода из приложения?

24

Я вижу странное поведение на моей машине с Windows 7; похоже, что когда исполняемый файл запускается, SYSTEM держит дескриптор к нему открытым в течение следующей минуты или около того. Вот моя последняя встреча:

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

Я открыл папку и попытался удалить steam.exe вручную, но Windows заявила, что у меня нет разрешения. Моя учетная запись является администратором и является единственной учетной записью пользователя на этом компьютере. Но на всякий случай я запустил Explorer в качестве администратора, но все равно не смог удалить файл. Я поднял Свойства файла на вкладку Безопасность, но там отображалось только сообщение о том, что у меня нет разрешения на просмотр разрешений.

Затем я вызвал Process Explorer, чтобы посмотреть, не блокирует ли что-либо файл. SYSTEM (PID 4) сделал, но когда я попытался закрыть дескриптор файла, он выдал ошибку, сообщающую, что дескриптор был недействительным. Я пытался просмотреть свойства дескриптора файла, но у меня тоже не было разрешения сделать это.

Я прекратил все, кроме не завершаемых системных процессов, и остановил все доступные мне службы, включая все, что связано с AV и брандмауэром, но проблема продолжает появляться. Я пытался использовать «takeown», чтобы получить право владения файлом, но он утверждает, что у меня нет разрешения на это. Другие люди заявили об успехе, используя инструмент под названием «Unlocker», но у него была та же проблема, что и у Process Explorer при закрытии дескриптора файла.

Я давно отключил Windows Indexing & Search и исключил C: \ из индексации, поэтому ответ на этот вопрос мне не подходит.

Каждый раз, примерно через минуту, дескриптор исчезает, и файл немедленно удаляется; очевидно, попытка обновления удалить его поставлена ​​в очередь и, наконец, закончилась, когда файл больше не был заблокирован. К сожалению, обновление уже прекращено и не может возобновиться. И когда я переустанавливаю, он, конечно, пытается снова запустить steam.exe, и я возвращаюсь к исходной точке.

У меня вопрос: почему эти ручки болтаются и как я могу им помешать?

Изменить: Вот дополнительная информация в соответствии с просьбой из комментариев:

C:\>fltmc instances
Filter                Volume Name                              Altitude        Instance Name      Frame  VlStatus
--------------------  -------------------------------------  ------------  ---------------------  -----  --------
KLIF                  \Device\Mup                             320400       KLIF                     0
KLIF                  C:                                      320400       KLIF                     0
KLIF                                                          320400       KLIF                     0
luafv                 C:                                      135000       luafv                    0
FileInfo              \Device\Mup                              45000       FileInfo                 0
FileInfo              C:                                       45000       FileInfo                 0
FileInfo                                                       45000       FileInfo                 0

Изменить: GMER указывает, что мой антивирус (Kaspersky) по-прежнему активен в некотором роде, несмотря на отключение его из собственного графического интерфейса, и его служба остановлена.

AttachedDevice  \Driver\tdx \Device\Ip     kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Tcp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\Udp    kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)
AttachedDevice  \Driver\tdx \Device\RawIp  kl1.sys (Kaspersky Unified Driver/Kaspersky Lab ZAO)

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

Изменить: Я отключил фильтр Kaspersky KLIF, но проблема блокировки остается.

Редактировать: Я решил конкретную проблему со Steam, установив, принудительно завершив установку, прежде чем он смог запустить steam.exe, затем перезапустив в безопасном режиме и запустив его там. Таким образом, очевидно, что все, что блокирует исполняемый файл, отсутствует в безопасном режиме.

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

DNS
источник
3
«Система» - это псевдопроцесс, представляющий (грубо говоря) ядро ​​Windows. Для получения четкого ответа потребуется дополнительная информация о вашей конфигурации (например, какие драйверы фильтров у пользователя).
0xC0000022L
Каков наилучший способ получить эту дополнительную информацию?
DNS
если это мини-фильтры, попробуйте проверить, fltmcне являются ли они устаревшими фильтрами, вам понадобится инструмент, такой как GMER, для вывода списка отфильтрованных объектов. Я знаю, что это не основная цель GMER, но ее можно использовать таким образом. Там также был какой-то инструмент из OSR, но я не помню его название. Я отвечу снова, если я помню.
0xC0000022L
Это оптимизация для программ, которые многократно закрывают и повторно открывают файлы. Служба Application Experience отказывается от оптимизации в особых случаях, например при попытке удаления из Windows Explorer, когда дескриптор все еще кэшируется.
user165568

Ответы:

20

Сделайте следующее:

  1. Отключите индексирование проблемного местоположения.

  2. Включите службу Application Experience и установите для нее значение «Automatic».

Вот и все.

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

Kevin
источник
5
# 2 (Включение службы «Опыт работы с приложениями») сработало для меня, спасибо! При отладке моего программного обеспечения LIVEditor (live html editor) мне было очень больно, так как мне приходилось многократно перекомпилировать EXE.
Эдвин Ип
1
Индексирование я не хотел отключать, но, к счастью, просто установил Application Experience на Automatic. Не могу поверить, что я жил с этой проблемой последние 5 лет, когда решение было настолько простым.
Мордред
мимо тебя я люблю тебя !!
энтузиаст
Начало AeLookupSvcработало, но почему? Что это за таинственный сервис?
cdlvcdlv
6

KLIF - это драйвер Kaspersky AV. Скорее всего, это связано с этим.

Мой план действий в этом случае - связаться с Касперским и попросить совета.

Однако, есть еще одна вещь , которую вы можете попробовать первый: отключить драйвер (в HKLM\SYSTEM\CurrentControlSet\Services), ища KLIFили что - то подобное , как имя ключа и установив REG_DWORDзначение имени Startв 4(что означает отключен), то перезагрузка. Это должно предотвратить загрузку драйвера фильтра KAV. Затем вы можете использовать, fltmcчтобы проверить результат.

Вывод из GMER, который вы дали, не имеет значения для рассматриваемого случая, поскольку он будет влиять только на сетевые соединения, а не на файловые операции. Похоже, у вас установлено что-то вроде Kaspersky Internet Security (или оно все еще неактивно на вашем компьютере).

Изменить: только FYI luafvотвечает за виртуализацию FS в сочетании с UAC. Т.е. если у вас нет доступа к файлу, он помещается в отдельную папку внутри вашего профиля. FileInfoпринадлежит SuperFetch - что на самом деле может быть частью вашей проблемы, но у меня не было аналогичной проблемы в Windows 7. Обычно не рекомендуется отключать SuperFetch, хотя можно.

0xC0000022L
источник
Это не позволило бы мне изменить значение этого ключа, поэтому я перезапустился в безопасном режиме и внес изменения там. При перезапуске записи KLIF удаляются из вывода fltmc, но проблема блокировки остается.
DNS
Я добавил немного больше информации; см. мое недавнее изменение к вопросу.
DNS
@DNS: вы пытались получить вывод fltmcв безопасном режиме? Вполне возможно, что SuperFetch не активен. Когда вы читаете о SuperFetch, звучит так, как будто ваше описание о том, как держать ручку немного дольше, может быть правдоподобным.
0xC0000022L
Это очень хорошая мысль, но, увы, и FileInfo, и luafv были активны в безопасном режиме.
DNS
Эти современные люксы с «Интернет-безопасностью» редко бывают полезны. MSE + здравого смысла должно быть достаточно.
киноюф
1

У меня была эта проблема с открытым исполняемым файлом Java, и я отключил взаимодействие с приложением ... (поиск Windows также отключен), настроив его на автоматический запуск, исправил это для меня. Благодарность!!! (У меня также были проблемы с файлами, которые не сохранялись целую минуту и ​​не могли удалять файлы до тех пор, пока я не закрыл их ...

Дэвид К
источник
Как отключить работу приложения?
Симон Шихан
Подойдет любая точка управления службами Windows - я использую Пуск >> Выполнить >> «services.msc» (ввод) >> щелкните правой кнопкой мыши «Работа с приложением» >> щелкните левой кнопкой мыши «Свойства» >> выберите вкладку «Общие» (по умолчанию)> > раскрывающийся список «тип запуска» >> выберите автоматический (левый клик) >> нажмите «применить»
David K
1

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

  1. Используйте Handle, чтобы узнать, какой процесс удерживает файл
  2. (Это была Система в моем случае)
  3. Попробуйте закрыть ручку handle.exe -c E14 -p 4. Ваш дескриптор файла будет найден в результатах поиска по дескриптору файла, и для идентификатора процесса, вероятно, будет то же самое.
  4. Это вывод Error closing handle: T
  5. Погуглив это, я нашел это связано с сетью
  6. Я нашел на другой машине, у меня действительно была открытая папка. Закрыто. Все хорошо.
Тодд
источник
0

У меня была эта проблема при попытке переименовать папку. Я должен был остановить службу сервера при выполнении переименования. Просто перезапуск не помог, так как системный процесс повторно заблокировал папку, как только перезапустилась служба сервера. Это, вероятно, решит и проблему, упомянутую здесь .

Черный лед
источник