windows 使用c++删除需要管理权限的目录

tct7dpnv  于 2022-11-18  发布在  Windows
关注(0)|答案(1)|浏览(213)

我试图删除Windows Defender的扫描历史记录和备份历史记录使用C++,但我不知道如何才能做到这一点。
我使用的代码是:

std::string wdefenderhistory = "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\History"; //defender history
std::string wdefenderbackupstore = "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\BackupStore"; //defender backups

if (std::filesystem::exists(wdefenderhistory)) {
    std::filesystem::remove_all(wdefenderhistory);
}
        
if (std::filesystem::exists(wdefenderbackupstore)) {
    std::filesystem::remove_all(wdefenderbackupstore);
}

我已经用std::fs::remove()std::remove()试过了,但是没有任何效果。
有什么方法可以不使用system()/ShellExecute()语法而使用管理员权限强制删除文件夹吗?
启动程序作为管理员等-没有工作,所以我问那里。
std::fs::remove_all()也给我一个内存错误:

我确信99%错误代码将是0x 5

gopyfrb3

gopyfrb31#

我注意到目录中的一些文件夹(只有CacheManager和它下面的所有东西需要)不需要“admin”权限,
所以我用以下方法解决了这个问题:
代码正在删除没有管理员权限的每个文件夹,并保留C:..\History路径:)

std::string wdefenderhistory = "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\History"; //defender history
    std::string wdefenderbackupstore = "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\BackupStore"; //defender backups

    if (std::filesystem::exists(wdefenderhistory)) {
        const std::filesystem::path defenderhist{ "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\History" };
        for (auto const& dir_entry : std::filesystem::recursive_directory_iterator{ defenderhist })
        {
            try {
                const std::filesystem::path cachemanager{ "C:\\ProgramData\\Microsoft\\Windows Defender\\Scans\\History\\CacheManager" };
                for (auto const& dir_entryy : std::filesystem::recursive_directory_iterator{ cachemanager })
                {
                    if (dir_entry != dir_entryy && dir_entry != cachemanager) {
                        std::filesystem::remove_all(dir_entry);
                    }
                }
            }
            catch (std::filesystem::filesystem_error const& ex) {
                std::cout
                    << "what():  " << ex.what() << '\n'
                    << "path1(): " << ex.path1() << '\n'
                    << "path2(): " << ex.path2() << '\n'
                    << "code().value():    " << ex.code().value() << '\n'
                    << "code().message():  " << ex.code().message() << '\n'
                    << "code().category(): " << ex.code().category().name() << '\n';
            }
        }
    }

请将此帖标记为已解决,因为我不知道如何做,谢谢

相关问题