我有一个代码,该代码在Microsoft.visualbasic.fileio.filesystem类中调用DeleteFile方法(在Microsoft.visualBasic Assembly中),以将文件发送到回收箱,而不是永久删除它。此代码在托管Windows服务中,并在Win Server 2K8计算机(32位)上运行。

相关行:

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

当然,我有“使用Microsoft.visualbasic.fileio;”;在课程的顶部,我验证了所调用的方法确实在该名称空间中的文件系统类中。在上行中,我指的是本地变量“文件” - 这是本地文件(例如,C: path to file.txt)的FileInfo,我确定它存在。该应用程序对文件和目录的目录都完全控制。

当文件从其目录中消失时,这似乎可以正常工作。但是,该文件并未显示在回收箱中。我尝试检查C: $ recycle.bin文件夹,因为我怀疑在会话0中运行的Windows服务将使它最终变成不同的回收箱,但所有的回收箱看起来都为空。

有人对导致这种行为的原因有线索吗?

顺便说一句 - 机器绝对不符合有关驱动器(或其他任何其他驱动器)的自由空间,并且该文件很小(几千字节,因此它不会超过回收箱阈值)。

有帮助吗?

解决方案

我认为您的服务正在以不同于您自己的用户帐户(或特殊服务帐户之一)的不同用户帐户运行。

我认为一个用户不可能查看另一个用户的回收箱的内容 - 即使您可以在C: $ recycle.bin文件夹中看到其存在的一些证据。


如果它在另一个用户帐户下运行,请尝试使用该帐户登录机器,然后检查回收箱。如果它是在服务帐户(例如本地服务,网络服务或本地系统)下运行的,则将更加棘手。

鉴于回收箱是分开的,您打算如何利用文件在回收箱中的事实?

其他提示

问题可能来自执行服务的用户,您是否可以尝试更改执行用户策略或更改执行用户。

无论如何,它也可能来自没有外壳执行的服务,因为回收箱取决于Shell API。 这个帖子 似乎确认了这个问题。因此,您需要采取另一种方法来从您的服务中获得Shell API。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top