У меня возникла проблема с реализацией одной задачки на Delphi.
В определенной папке хранятся файлы. Есть программа, которая мониторит эту папку и, допустим, отображает список всех файлов пользователю.
Пользователь может указать один из файлов. При этом этот файл необходимо удалить. Файлы имеют атрибут безопасности,
разрешающий только чтение для группы "Все".
У меня возникло два соображения:
1) создать COM-объект, запускаемый от имени пользователя, имеющего доступ на запись к этим файлам и толкать его каждый раз,когда пользователь в основной проге указывает файл. При этом когда приложение пыталось выполнить метод COM-объекта, запущенного от имени другого пользователя, возникает ошибка "Отказано в доступе". На этом я зашел в тупик и перешел ко второму варианту.
2) Создать службу NT, которая производила бы все манипуляции с файлами по запросу приложения, мониторящего папку. Тут сразу возникло множество проблем. Во-первых, почему-то не получилось реализовать взаимодействие через DDE (я не нашел в литературе ничего по поводу того, могут ли службы взаимодействовать с пользовательскими процессами через DDE). Во-вторых, служба почему-то все-равно не хотела удалять файлы.
Я попробовал просто создать службу с единственным таймером, по которому через 10 сек. она пыталась удалить один конкретный файл. Поставил для "Все" атрибут безопасности "разрешить чтение" остальное — запретил. Она отказалась удалять файл. Тогда я решил создать пользователя и в атрибутах безопасности этого файл и разрешил ему полный доступ. Запустил службу от имени этого пользователя. Эффект тот же. Тупик.
Вообще говоря, мне больше нравится второй подход. Еще одно замечание: файлы могут находиться на файл-сервере (если это что-то меняет)
Если кто-то может мне помочь, я буду очень признателен. У меня небольшой опыт программирования на Delphi, поэтому может быть вопрос довольно простой для профессионалов — я уже два дня бьюсь, накупил литературы, все равно ничего не выходит.
Здравствуйте, Fresh_den, Вы писали:
F_>Если кто-то может мне помочь, я буду очень признателен. У меня небольшой опыт программирования на Delphi, поэтому может быть вопрос довольно простой для профессионалов — я уже два дня бьюсь, накупил литературы, все равно ничего не выходит.
Слегка раздражает, когда к вопросу скорее из категории WinAPI приплетают Delphi...
Как файл удаляешь? Возможно, файл удаляется каким-то рантаймом, не имеющим для того привилегий.
H e l l o, Fresh_den!
Fd> 2) Создать службу NT, которая производила бы все манипуляции с Fd> файлами по запросу приложения, мониторящего папку.
Чтобы служба смогла удалить файл, она должна быть запущена с
достаточными для этого правами. И уж ни как не с правами пользователя,
т.к. вы сами сказали, что для пользователя есть доступ только на
чтение.
--
Всего хорошего, Слава v0.666 beta (http://slava.users.otts.ru)
-= Глюк — не воробей, вылетит — убей. =-
Posted via RSDN NNTP Server 1.9 alpha
Re[2]: Создание службы для удаления readonly файлов
Здравствуйте, Slava Antonov, Вы писали:
SA>H e l l o, Fresh_den!
Fd>> 2) Создать службу NT, которая производила бы все манипуляции с Fd>> файлами по запросу приложения, мониторящего папку.
SA>Чтобы служба смогла удалить файл, она должна быть запущена с SA>достаточными для этого правами. И уж ни как не с правами пользователя, SA>т.к. вы сами сказали, что для пользователя есть доступ только на SA>чтение.
Служба запускается под LocalSystem, т.е. при загрузке системы.
Re[2]: Создание службы для удаления readonly файлов
Здравствуйте, Glen Able, Вы писали:
F_>>Если кто-то может мне помочь, я буду очень признателен. У меня небольшой опыт программирования на Delphi, поэтому может быть вопрос довольно простой для профессионалов — я уже два дня бьюсь, накупил литературы, все равно ничего не выходит.
GA>Слегка раздражает, когда к вопросу скорее из категории WinAPI приплетают Delphi...
Прошу прощения... я учусь.
GA>Как файл удаляешь? Возможно, файл удаляется каким-то рантаймом, не имеющим для того привилегий.
Файлы удаляю DeleteFile () (vcl).
Re[3]: Создание службы для удаления readonly файлов
Здравствуйте, Fresh_den, Вы писали:
F_>Пользователь может указать один из файлов. При этом этот файл необходимо удалить. Файлы имеют атрибут безопасности, F_>разрешающий только чтение для группы "Все".
Если пользователь по логике работы должен удалять файлы, то ему нужно дать соответствующие права. Без этого никак. В MS знаешь ли тоже не совсем дураки сидят. Если ты запустишь службу, которая будет удалять файлы по любому запросу, без всяких проверок, то тем самым ты лишь создашь большую дыру в безопасности сервера, и не более того. Если файл может удалить кто угодно, то зачем ограничивать права на него?
Сдается, что проблема тут не программная, а скорее административная...