美文网首页
C#代码无法删除System32下的文件问题

C#代码无法删除System32下的文件问题

作者: 堆石成山 | 来源:发表于2024-08-12 14:28 被阅读0次

用C#代码无法删除System32目录下的文件问题,这里分析2点原因。

1、是权限问题,需要管理员权限。

解决办法:用管理员权限即可。

2、是64位操作系统中,默认已启用了文件系统重定向,导致无法找到路径C:\Windows\System32下面的文件。

解决办法:先调用kernel32.dll的方法Wow64DisableWow64FsRedirection禁用调用线程的文件系统重定向。用完路径以后,再用kernel32.dll的方法Wow64EnableWow64FsRedirection启用文件系统重定向即可。代码如下:

/// <summary>
/// 禁用调用线程的文件系统重定向。 默认已启用文件系统重定向
/// </summary>
/// <param name="ptr"></param>
/// <returns></returns>
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int Wow64DisableWow64FsRedirection(ref IntPtr ptr);
/// <summary>
/// 启用文件系统重定向
/// </summary>
/// <param name="ptr"></param>
/// <returns></returns>
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int Wow64EnableWow64FsRedirection(ref IntPtr ptr);

private static void DeleteDll()
{
     if (Environment.Is64BitOperatingSystem)//64位系统
    {
            IntPtr val = IntPtr.Zero;
             Wow64DisableWow64FsRedirection(ref val);//解决删除不了system32下的文件问题
             var sysPath32 = Environment.GetFolderPath(Environment.SpecialFolder.System);
             File.Delete(sysPath32 + @"\xxx.dll");//删除64位dll
             Wow64EnableWow64FsRedirection(ref val);//启用文件系统重定向
     }
      else//32位系统
      {
      }
}

相关文章

网友评论

      本文标题:C#代码无法删除System32下的文件问题

      本文链接:https://www.haomeiwen.com/subject/xlcdkjtx.html