как удалить копию чужого файла?
От: ksd Россия  
Дата: 30.05.17 08:34
Оценка:
Есть сервис, который запускается под учеткой "SYSTEM_SERVICE" вместе с операционкой.
Есть некоторое количество процессов, который запускаются от произвольных пользователей компа, т.е. под разными учетками, но другими, которые делают копии файлов пользователей, или создают свои временные файлы.
Сервис может получить копию или временный файл для обработки, после чего должен их удалить.
Таки DeleteFile говорит FALSE и GetLastError говорит 32: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process).
Антивирус есть. Но и сервис предпринимает попытки до победного конца, но никак. Файлы точно закрываются.
Что можно предпринять?
Re: как удалить копию чужого файла?
От: Cruser Украина  
Дата: 30.05.17 08:44
Оценка: 1 (1)
Здравствуйте, ksd, Вы писали:

ksd>Есть сервис, который запускается под учеткой "SYSTEM_SERVICE" вместе с операционкой.

ksd>Есть некоторое количество процессов, который запускаются от произвольных пользователей компа, т.е. под разными учетками, но другими, которые делают копии файлов пользователей, или создают свои временные файлы.
ksd>Сервис может получить копию или временный файл для обработки, после чего должен их удалить.
ksd>Таки DeleteFile говорит FALSE и GetLastError говорит 32: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process).
ksd>Антивирус есть. Но и сервис предпринимает попытки до победного конца, но никак. Файлы точно закрываются.
ksd>Что можно предпринять?

Надо добавить при создании файла атрибут FILE_SHARE_DELETE.
Re: как удалить копию чужого файла?
От: EreTIk EreTIk's Box
Дата: 30.05.17 09:24
Оценка: 15 (3)
Здравствуйте, ksd, Вы писали:

ksd>Таки DeleteFile говорит FALSE и GetLastError говорит 32: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process).

ksd>Антивирус есть. Но и сервис предпринимает попытки до победного конца, но никак. Файлы точно закрываются.
ksd>Что можно предпринять?

Перечислить описатели файла и посмотреть, кто (какой процесс) держит открытый целевой файл:
Re[2]: как удалить копию чужого файла?
От: MShura  
Дата: 07.06.17 21:15
Оценка:
ETI>Перечислить описатели файла и посмотреть, кто (какой процесс) держит открытый целевой файл:
ETI>[list]
ETI>
  • Программно — HOWTO: Enumerate handles — Sysinternals Forums
    ETI>Но не из всех процессов не на всех версиях ОС можно сделать duplicate описателя, поэтому способ не самый надежный

    Ха, мое сообщение старше на 4 года

    http://rsdn.org/forum/src/1136443.1
    Автор: MShura
    Дата: 21.04.05
  •  
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.