Supprimer le fichier à RecycleBin dans csharp avec la méthode FileSystem.DeleteFile de VB ne fonctionne pas correctement

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

Question

J'ai un morceau de code qui appelle la méthode DeleteFile dans la classe Microsoft.VisualBasic.FileIO.FileSystem (dans l'assemblée Microsoft.VisualBasic) afin d'envoyer le fichier à la Corbeille au lieu de supprimer définitivement. Ce code est dans un service Windows géré et fonctionne sur une machine Windows Server 2K8 (32 bits).

La ligne concernée:

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

Bien sûr, j'ai « à l'aide Microsoft.VisualBasic.FileIO; » au sommet de la classe et je vérifié que la méthode appelée est vraiment la classe FileSystem dans cet espace. Dans la ligne ci-dessus je me réfère à un « fichier » variable locale - qui est un FileInfo pour un fichier local (par exemple, C: \ chemin \ vers \ file.txt) dont je suis certain qu'il existe. L'application a un contrôle total sur la fois le fichier et le répertoire il se trouve.

Cela semble fonctionner parfaitement que le fichier disparaît du répertoire dans lequel il se trouvait. Cependant, le fichier ne se présente pas dans la Corbeille. J'ai essayé d'inspecter le C:. \ Recycle.Bin $ dossiers que je soupçonnais manuellement le service Windows en cours d'exécution en session 0 rendrait fin dans une autre corbeille, mais tous les Corbeilles apparaissent vide

Est-ce que quelqu'un a une idée de ce qui provoque ce comportement?

Par ailleurs - la machine est certainement pas hors de l'espace libre sur le disque en question (ou tout autre lecteur pour cette matière), et le fichier est très faible (quelques kilo-octets, il ne dépasse pas la seuil Corbeille).

Était-ce utile?

La solution

Je suppose que votre service est en cours d'exécution sous un compte utilisateur différent de votre propre (ou l'un des comptes de services spéciaux).

Je ne crois pas qu'il soit possible pour un utilisateur de visualiser le contenu de la corbeille d'un autre utilisateur - même si vous pouvez voir la preuve de leur existence dans le C:. \ $ Dossier Recycle.Bin


Si elle est en cours d'exécution sous un autre compte utilisateur, essayez de vous connecter à la machine en utilisant ce compte, puis vérifiez la corbeille. Si elle est en cours d'exécution sous un compte de service (par exemple Service local, Service réseau ou système local) ça va être plus délicat.

Étant donné que les bacs de recyclage sont séparés, comment envisagez-vous d'utiliser le fait que le fichier est dans la corbeille de toute façon?

Autres conseils

le problème pourrait venir de l'utilisateur exécutant votre service, vous pouvez essayer de modifier la stratégie utilisateur d'exécuter ou de modifier l'utilisateur d'exécution.

Quoi qu'il en soit, il pourrait aussi venir du service en cours d'exécution sans coquille, comme la corbeille dépendent de la coquille api. ce poste semblent confirmer cette question. Donc, vous devez adopter une autre approche accès shell api de votre service.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top