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