我试图从sysprep.exe.Local
删除不为空的文件夹C:\Windows\System32\sysprep
。
首先,我尝试仅删除根test
目录:
...
res = SHCreateItemFromParsingName("C:\\Windows\\System32\\sysprep\\sysprep.exe.Local", NULL, IID_ShellItem, &isrc);
if (res != 0) printf("Error: %#X\n", res);
res = fileOp.lpVtbl.DeleteItem(fileOp, isrc, NULL);
if (res != 0) printf("Error: %#X\n", res);
res = fileOp.lpVtbl.PerformOperations(fileOp);
if (res != 0) printf("Error: %#X\n", res);
...
稍后,我尝试删除
test
文件夹中的所有文件,然后删除sysprep.exe.Local
文件夹本身。每次,我运行我的程序-我有
res == 0
。没有错误,但文件和文件夹位于同一位置。当我尝试删除不为空的C:\Windows\System32\sysprep\test
目录时-它已成功消失。首先,我认为重新启动后文件和文件夹将被删除-不会。
为什么会这样?
最佳答案
顾名思义,System32
是一个包含关键文件的系统目录。它可以防止意外删除文件。也不要在此处创建文件。
在特殊情况下,在MSDN中可能会发现此规则的例外,但是从上下文中可以清楚地看出要使用的特定功能。例如。驱动程序安装将在此处创建文件,但您仍然不调用CreateFile
这样做。
[编辑]
现在,您已经确定不仅在尝试从System32中删除文件,而且还试图从操作系统的实际部分中删除文件,这证实了您的怀疑。
如果右键单击SysPrep.EXE
,您将看到它归TrustedInstaller
所有。这会将其标识为Windows Update管理的受保护文件。您不仅无法删除它,而且您的尝试可能会触发每个不错的防病毒程序。