Win32 текущий каталог, блокировка и интеграция оболочки - PullRequest
0 голосов
/ 17 марта 2009

В Win32 текущим рабочим каталогом вашего основного потока является местоположение, из которого был запущен исполняемый файл. Моя проблема заключается в том, что даже после вызова SetCurrentDirectory () куда-то еще процесс, очевидно, все еще имеет объект файловой системы, ссылающийся на этот начальный каталог запуска (проверяемый с помощью инструмента, такого как Process Explorer) - что означает, что этот директор не может быть удаленным процессом.

Кто-нибудь здесь знает о не слишком взломанном решении? Я специально сталкиваюсь с проблемой с программой, которая интегрируется с проводником (добавление глагола в ключ реестра HKCR \ Directory \ shell), мне нужно обработать файлы в каталоге, щелкнутом правой кнопкой мыши, и удалить исходный каталог, что невозможно поскольку начальный рабочий каталог установлен, как вы уже догадались, щелчок правой кнопкой мыши по каталогу.

РЕДАКТИРОВАТЬ : Я пойду на подход "использовать вспомогательный запуск из каталога вменяемого". Это может быть не очень элегантно, но это будет работать и не требует никаких неприятных хаков.

1 Ответ

1 голос
/ 17 марта 2009

Ваше самое простое решение может состоять в том, чтобы просто запустить небольшой вспомогательный процесс, который выполняется в любом каталоге, который вы укажете (c: \, например), а затем просто выйти и позволить ему делать свое дело. Возможно, его нужно синхронизировать с мьютексом или просто повторить два или три раза по таймеру ...

У меня была еще одна мысль: вы можете использовать CreateFile () с FILE_FLAG_DELETE_ON_CLOSE. Тогда он должен исчезнуть, когда все отпустят его, но только если он был открыт с помощью FILE_SHARE_DELETE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...