使用VB的Filesystem.DeleteFile方法在CSHARP中删除文件
-
09-10-2019 - |
题
我有一个代码,该代码在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。