2010-10-25 3 views
1

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

+3

(-1) Пожалуйста, задайте правильный вопрос, и сейчас невозможно узнать, что вы хотите сделать. Кроме того, я позволю себе уменьшить количество вопросительных знаков в вашем вопросе :) –

+0

@Pekka: Может быть, вопросительные знаки были частью вопроса? (вид заполнителей файловой системы). ;-) – splash

+0

@splash ahaha, кто знает! :) –

ответ

5

На самом деле вопрос должен быть «Что в приложении может помешать папке удалить из других приложений».

Возможности:

  1. Ваша служба открывает какой-то файл в этой папке и не закрывает его. Проверьте все файлы, которые вы открываете в службе, и закройте те, которые находятся в этой папке.
    Как файлы закрыты, зависит от того, как они были открыты. Если вы использовали CreateFile(), закройте CloseHandle(). Если это был TFileStream, то просто уничтожьте его.

  2. В вашей службе указан этот каталог как текущий каталог. Выберите другой каталог как текущий с помощью SetCurrentDir.

+1

И ответ на вопрос в заголовке тогда будет следующим: вы не можете, по крайней мере, не под Windows. (например, Linux позволяет удалять файлы и папки, которые используются, что может раздражать, если вы к этому не привыкли). – dummzeuch

+0

@himself - номер 2 не работает. Я попробовал это. – Ampere

1

Вы не можете удалить его, если только вы не можете сообщить другой службе, отправив сообщение, чтобы прекратить использование папки (или ее содержимого) перед ее удалением.

0

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

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

Вещи рассмотреть:

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

Смежные вопросы