Borrar archivo a RecycleBin en CSharp con el método FileSystem.DeleteFile de VB no funciona correctamente

StackOverflow https://stackoverflow.com/questions/4647612

Pregunta

Tengo un trozo de código que llama al método en la clase DeleteFile Microsoft.VisualBasic.FileIO.FileSystem (en el Microsoft.VisualBasic montaje) con el fin de enviar el archivo a la papelera de reciclaje en lugar de borrarla definitivamente. Este es el código de un servicio y se ejecuta en una máquina Windows Server 2k8 gestionados Windows (32 bits).

La línea relevante:

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

Por supuesto, tengo "usando Microsoft.VisualBasic.FileIO;" en la parte superior de la clase I y verifica que el método que se llama está realmente en la clase de sistema de archivos en ese espacio de nombres. En la línea anterior me refiero a una variable "archivo" local - que es un FileInfo para un archivo local (por ejemplo, C: \ ruta \ a \ archivo.txt) del cual estoy seguro de que existe. La aplicación tiene control total sobre tanto el archivo y el directorio que se encuentra.

Esto parece funcionar muy bien que el archivo desaparece del directorio que estaba. Sin embargo, el archivo no aparece en la papelera de reciclaje. He intentado inspeccionar el directorio C:. \ $ Recycle.bin carpetas manualmente como sospechaba el servicio de Windows que se ejecutan en la sesión 0 haría terminan en una papelera de reciclaje diferente, pero todas las papeleras de reciclaje aparecerá vacío

¿Alguien tiene una idea de lo que hace que este comportamiento?

Por cierto - la máquina es, sin duda, no sin espacio libre en la unidad en cuestión (o cualquier otra unidad para el caso), y el archivo es muy pequeño (un par de kilobytes, por lo que no supere el papelera de reciclaje de umbral).

¿Fue útil?

Solución

Asumo que su servicio se ejecuta bajo una cuenta de usuario diferente a la suya (o una de las cuentas de servicios especiales).

No creo que es posible que un usuario ver el contenido de la papelera de reciclaje de otro usuario - a pesar de que se puede ver algunas pruebas de su existencia en el directorio C:. $ Recycle.bin carpeta \


Si se está ejecutando bajo otra cuenta de usuario, intente acceder a la máquina con esa cuenta, y a continuación, comprobar la papelera de reciclaje. Si se está ejecutando bajo una cuenta de servicio (por ejemplo, servicio local, servicio de red o del sistema local) que va a ser más complicado.

Dado que los contenedores de reciclaje están separados, ¿cómo estás planeando hacer uso del hecho de que el archivo está en la papelera de reciclaje de todos modos?

Otros consejos

el problema podría venir del usuario que ejecuta el servicio, podría usted trate de modificar la política de usuario que está ejecutando o cambiar el usuario que está ejecutando.

De todos modos, también podría venir del servicio que se ejecuta sin una concha, como la papelera de reciclaje depende de la api shell. este post parecen confirmar este problema. Por lo que tendría que tomar otro enfoque para acceso shell API de su servicio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top