如何以编程方式或命令行将c#打开Explorer.exe到“回收站”

我想要一个WPFbutton,将Windows 7 | 8中的explorer.exe直接打开到“回收站”中。 这是因为我的应用程序擦除了很多文件,我想为用户提供一个快速恢复文件的方法。 命令行参数不起作用,可能是因为“回收站”是一个虚拟目录。 我曾尝试使用“$回收站”。 Explorer.exe / root,其中a是虚拟文件失败。 试图保护回收站\ Bin中的空间似乎不工作。

这里是我testing和使用的Scott Powell的工作代码。 谢谢Scott @

private void ExploreTrashBin ( ) { String str_RecycleBinDir = String.Format(@"C:\$Recycle.Bin\{0}", UserPrincipal.Current.Sid); Process . Start ( "explorer.exe" , str_RecycleBinDir ); } private void TrashBin_Button_Click ( object sender , RoutedEventArgs e ) { ExploreTrashBin ( ); } 

你可以执行下面的命令来达到这个目的,

 start shell:RecycleBinFolder 

从你可以使用的C#代码中,

 System.Diagnostics.Process.Start("explorer.exe", "shell:RecycleBinFolder"); 

它已经在.Net中的Microsoft.VisualBasic.FileIO.FileSystem类中实现(所以C#本地支持使用这个 )。

这样,你不需要跑 shell命令 :只需以编程方式删除文件/文件夹,就好像用Windows资源管理器交互地完成一样

 using Microsoft.VisualBasic.FileIO; FileSystem.DeleteFile(...) FileSystem.DeleteDirectory(...) 

在这里输入图像说明

回收站位于名为\ $ Recycle.Bin \%SID%的隐藏目录中,其中%SID%是执行删除的用户的SID。

基于此,我们可以这样做:添加一个到System.DirectoryServices.AccountManagement的.NET引用

 string str_RecycleBinDir = UserPrincipal.Current.Sid; Process.Start("explorer.exe","C:\$Recycle.Bin\" + str_RecycleBinDir); 

现在应该能够基于正在运行的用户帐户访问正确的回收站目录。 在Windows 7中工作(测试)。