Удалите файл в корзину в csharp, если метод VS FileSystem.DeleteFile не работает должным образом. - PullRequest
1 голос
/ 10 января 2011

У меня есть фрагмент кода, который вызывает метод DeleteFile в классе Microsoft.VisualBasic.FileIO.FileSystem (в сборке Microsoft.VisualBasic), чтобы отправить файл в корзину вместо того, чтобы окончательно удалить его. Этот код находится в управляемой службе Windows и работает на компьютере с Win Server 2k8 (32-разрядная версия).

Соответствующая строка:

FileSystem.DeleteFile(file.FullName, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin, UICancelOption.DoNothing);

Конечно, у меня есть "использование Microsoft.VisualBasic.FileIO;" в начале класса, и я убедился, что вызываемый метод действительно находится в классе FileSystem в этом пространстве имен. В приведенной выше строке я ссылаюсь на локальную переменную «file» - это FileInfo для локального файла (скажем, C: \ path \ to \ file.txt), в котором я уверен, что он существует. Приложение имеет полный контроль над файлом и каталогом, в котором он находится.

Кажется, что это работает просто отлично, поскольку файл исчезает из каталога, в котором он находился. Однако файл не отображается в Корзине. Я попытался проверить папки C: \ $ Recycle.Bin вручную, так как подозревал, что служба Windows, запущенная в сеансе 0, попадет в другую корзину, но все корзины кажутся пустыми.

Кто-нибудь знает, что вызывает такое поведение?

Кстати, на машине определенно нет свободного места на рассматриваемом диске (или на любом другом диске), и файл очень маленький (пару килобайт, поэтому он не превышает Порог корзины).

Ответы [ 2 ]

4 голосов
/ 10 января 2011

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

Я не верю, что один пользователь может просматривать содержимое другого пользователякорзина - даже если вы можете увидеть некоторые доказательства их существования в папке C: \ $ Recycle.Bin.


Если она работает под другой учетной записью пользователя, попробуйте войти в систему с этой учетной записью,а затем проверьте корзину.Если он работает под учетной записью службы (например, «Локальная служба», «Сетевая служба» или «Локальная система»), это будет сложнее.

Учитывая, что корзины расположены отдельно, как вы планируете использовать тот факт,в любом случае файл находится в корзине?

0 голосов
/ 10 января 2011

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

В любом случае, это также может происходить от службы, выполняемой без оболочки, поскольку корзина зависит от API оболочки. этот пост , кажется, подтверждает эту проблему. Таким образом, вам нужно будет использовать другой подход для доступа к api shell из вашего сервиса.

...