用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位系统
{
}
}
网友评论