删除文件时拒绝访问

本文关键字:拒绝访问 文件 删除 | 更新日期: 2023-09-27 18:13:15

我有一个服务(****。SVC文件),用于将图像保存在应用程序文件夹中。

当我试图从这个文件夹中删除另一个图像文件(未使用)时,我得到"访问路径被拒绝"。

foreach (string file in Directory.GetFiles(serverPath))
{
       File.Delete(file);
}

你知道为什么我可以在这个文件夹里写东西却不能删除吗?

删除文件时拒绝访问

try this:

FileInfo fi = new FileInfo(FileName); 
if (fi.IsReadOnly) 
      fi.IsReadOnly = false; 
fi.Delete(); 

您是否在创建FileStreams时使用"using"来写文件,或者您是否在流/写入器实例上显式调用close() ?如果既不是第一个也不是最后一个,那么被访问的文件可能保持锁定状态,直到垃圾收集器清除那些已经超出作用域的实例…

所以你的问题的答案显然是,服务是由不同的用户帐户运行的,而不是登录系统的用户帐户。

这是WindowsServer平台上的一个常见问题,您必须为IUSR帐户授予iis托管的应用程序权限。

去检测哪个帐户正在运行服务,例如使用managentobjectsearcher。

这里的A.Moore的代码实现了这个功能

ManagementObjectSearcher Processes = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
    foreach (ManagementObject Process in Processes.Get())
    {
        if (Process["ExecutablePath"] != null)
        {
             string ExecutablePath = Process["ExecutablePath"].ToString();
             string[] OwnerInfo = new string[2];
             Process.InvokeMethod("GetOwner", (object[])OwnerInfo);
             Console.WriteLine(string.Format("{0}: {1}", System.IO.Path.GetFileName(ExecutablePath), OwnerInfo[0]));
        }
     }

从这个,你看到哪个用户运行你的服务,授予它正确的权限,问题就解决了;)

编辑:为此目的创建一个简单的控制台应用程序,如果您有足够的信心,您必须手动添加对System.Management的引用并为该名称空间添加使用,以便它工作。

它生成所有进程,但您甚至可以修改查询,仅适用于您的应用程序的进程名,但我发现这样就足够了。