从C程序执行命令行

时间:2014-03-31 15:39:00

标签: c winapi cmd

我需要从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传递,但我仍然得到相同的错误。

1 个答案:

答案 0 :(得分:2)

我看到以下问题:

  1. 你没有逃脱所有反斜杠字符。
  2. 这里不需要cmd。直接启动可执行文件。
  3. CreateProcess的第二个参数需要一个可修改的缓冲区,但是你传递了一个文字。由于实现细节,您通常使用ANSI来逃避它。但正式来说这是错误的。传递可修改的缓冲区。
  4. 另一件可能是问题的是您如何声明和初始化si。我们看不到那段代码。

    当然,也许你的代码很好,但另一个应用程序是呕吐。