Есть сервис, который запускается под учеткой "SYSTEM_SERVICE" вместе с операционкой.
Есть некоторое количество процессов, который запускаются от произвольных пользователей компа, т.е. под разными учетками, но другими, которые делают копии файлов пользователей, или создают свои временные файлы.
Сервис может получить копию или временный файл для обработки, после чего должен их удалить.
Таки DeleteFile говорит FALSE и GetLastError говорит 32: ERROR_SHARING_VIOLATION (The process cannot access the file because it is being used by another process).
Антивирус есть. Но и сервис предпринимает попытки до победного конца, но никак. Файлы точно закрываются.
Что можно предпринять?
Здравствуйте, 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.
Здравствуйте, 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>Что можно предпринять?
Перечислить описатели файла и посмотреть, кто (какой процесс) держит открытый целевой файл:
ETI>Перечислить описатели файла и посмотреть, кто (какой процесс) держит открытый целевой файл: ETI>[list] ETI>Программно — HOWTO: Enumerate handles — Sysinternals Forums ETI>Но не из всех процессов не на всех версиях ОС можно сделать duplicate описателя, поэтому способ не самый надежный