用C#代碼無法刪除System32目錄下的文件問題社裆,這里分析2點原因。
1向图、是權(quán)限問題泳秀,需要管理員權(quán)限。
解決辦法:用管理員權(quán)限即可榄攀。
2嗜傅、是64位操作系統(tǒng)中,默認(rèn)已啟用了文件系統(tǒng)重定向檩赢,導(dǎo)致無法找到路徑C:\Windows\System32下面的文件吕嘀。
解決辦法:先調(diào)用kernel32.dll的方法Wow64DisableWow64FsRedirection禁用調(diào)用線程的文件系統(tǒng)重定向。用完路徑以后贞瞒,再用kernel32.dll的方法Wow64EnableWow64FsRedirection啟用文件系統(tǒng)重定向即可偶房。代碼如下:
/// <summary>
/// 禁用調(diào)用線程的文件系統(tǒng)重定向。 默認(rèn)已啟用文件系統(tǒng)重定向
/// </summary>
/// <param name="ptr"></param>
/// <returns></returns>
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int Wow64DisableWow64FsRedirection(ref IntPtr ptr);
/// <summary>
/// 啟用文件系統(tǒng)重定向
/// </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位系統(tǒng)
{
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);//啟用文件系統(tǒng)重定向
}
else//32位系統(tǒng)
{
}
}