我需要从c程序执行以下命令:
clamscan.exe -r C:\testing -d"C:\Documents and Settings\All Users\.clamwin\db" -lC:\testing\results.txt
我正在尝试使用CreateProcess函数,如下所示:
res = CreateProcess(NULL, "cmd.exe /c C:\\Program Files\\ClamWin\\bin\\clamscan.exe -r C:\\testing -d \"C:\Documents and Settings\All Users\.clamwin\db\" -lC:\\testing\\results.txt" , NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
以下错误处理:
if(res!=0) {
// Wait till cmd do its job
WaitForSingleObject( pi.hProcess, INFINITE );
// Check whether our command succeeded?
GetExitCodeProcess( pi.hProcess, &dwErr );
// Avoid memory leak by closing process handle
CloseHandle( pi.hProcess );
} else {
printf("not done");
dwErr = GetLastError();
}
运行程序时,我在消息框中收到以下错误两次:
cmd.exe - Application Error
The application failed to initialize properly (0x0000005). Click on OK to terminate the application.
任何人都可以帮我理解问题所在吗?我甚至尝试将“cmd.exe”作为lpCommandLine传递,但我仍然得到相同的错误。
答案 0 :(得分:2)
我看到以下问题:
CreateProcess
的第二个参数需要一个可修改的缓冲区,但是你传递了一个文字。由于实现细节,您通常使用ANSI来逃避它。但正式来说这是错误的。传递可修改的缓冲区。 另一件可能是问题的是您如何声明和初始化si
。我们看不到那段代码。
当然,也许你的代码很好,但另一个应用程序是呕吐。