C++ 正在尝试使用windows注册表中的路径和DeleteFile()方法删除.exe文件

C++ 正在尝试使用windows注册表中的路径和DeleteFile()方法删除.exe文件,c++,winapi,C++,Winapi,因此,我需要扫描windows注册表,将它们全部显示在控制台上,然后检查其中哪些值与代码中设置的名称相同 当程序找到具有目标名称的值时,我需要终止它的进程,并使用DeleteFile()将其从硬件中删除 所以我已经做了所有的事情,得到了.exe文件目标的路径,但是当我使用DeleteFile()时;它不会删除该文件 void EndProcess(HANDLE snap, HANDLE &process, PROCESSENTRY32 pe32, TCHAR virusName[],

因此,我需要扫描windows注册表,将它们全部显示在控制台上,然后检查其中哪些值与代码中设置的名称相同

当程序找到具有目标名称的值时,我需要终止它的进程,并使用DeleteFile()将其从硬件中删除

所以我已经做了所有的事情,得到了.exe文件目标的路径,但是当我使用DeleteFile()时;它不会删除该文件

void EndProcess(HANDLE snap, HANDLE &process, PROCESSENTRY32 pe32, TCHAR 
virusName[], TCHAR valuePath[], wofstream &file)
{
    process = OpenProcess(PROCESS_TERMINATE, FALSE, pe32.th32ProcessID);
    if (TerminateProcess(process, 1))
    {
        cout << "Virus process is found and successfully terminated!" << 
    endl;
        file << "Virus process is found and successfully terminated!" << 
    endl;
        CloseHandle(process);
        DeleteFile(valuePath);
    }
    else
    {
        cout << "Failed to terminate Virus process!" << endl;
        file << "Failed to terminate Virus process!" << endl;
    }
}
void EndProcess(句柄捕捉、句柄和进程、PROCESSENTRY32 pe32、TCHAR
virusName[],TCHAR valuePath[],wofstream&文件)
{
process=OpenProcess(process\u TERMINATE,FALSE,pe32.th32ProcessID);
if(终止进程(进程,1))
{
cout是异步的,它启动终止并立即返回。也就是说,不确定进程是否已终止。简单的解决方案是添加一个
Sleep()
延迟

如果需要确保进程已终止,请使用进程句柄调用该函数。并且在打开进程句柄时,还需要添加
同步
访问权限:

void EndProcess(HANDLE snap, HANDLE &process, PROCESSENTRY32 pe32, TCHAR
    virusName[], TCHAR valuePath[], wofstream &file)
{
    process = OpenProcess(PROCESS_TERMINATE | SYNCHRONIZE, FALSE, pe32.th32ProcessID);
    if (TerminateProcess(process, 1))
    {
        cout << "Virus process is found and successfully terminated!" <<
            endl;
        file << "Virus process is found and successfully terminated!" <<
            endl;
        WaitForSingleObject(process, INFINITE);
        CloseHandle(process);
        DeleteFile(valuePath);
    }
    else
    {
        cout << "Failed to terminate Virus process!" << endl;
        file << "Failed to terminate Virus process!" << endl;
    }
}
void EndProcess(句柄捕捉、句柄和进程、PROCESSENTRY32 pe32、TCHAR
virusName[],TCHAR valuePath[],wofstream&文件)
{
process=OpenProcess(process_TERMINATE | SYNCHRONIZE,FALSE,pe32.th32ProcessID);
if(终止进程(进程,1))
{

我忘了提一下。这是我关闭进程并需要删除文件的最后一段代码。根据操作系统的不同,删除一个由其他应用程序打开的文件可能是可能的,也可能是不可能的。通常,无法保证删除一个文件(当然,除非您的代码作为文件系统实现的一部分在内核空间中运行)。@Klaidelio如果您忘记提及一些重要信息,您可以随时回答您的问题,而不是添加不必要的注释。@Klaidelio“我关闭了进程”-好的,很好。但是其他进程可能会打开该文件。
DeleteFile
工作正常。如果文件没有被删除,那么当您调用
DeleteFile
时,大概会返回
FALSE
。是吗?您不检查。如果返回
FALSE
,那么
GetLastError
返回什么错误代码?这就是您开始返回的方式o调试。