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

用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位系统
      {
      }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容