【问题标题】:Execute command line from C program从 C 程序执行命令行
【发布时间】:2014-04-01 06:15:17
【问题描述】:

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

【问题讨论】:

  • 删除 cmd.exe 并直接启动“C:\\Program Files\\ClamWin\\bin\\clamscan.exe”
  • 试过了,我得到了同样的错误。
  • 我认为你还需要转义C:\Documents and Settings\All Users\.clamwin\db中的反斜杠,所以C:\\Documents and Settings\\All Users\\.clamwin\\db
  • 试过了还是不行。
  • 我们无法判断您做了什么,因为您没有编辑您的问题。你的字符串有点乱,有些反斜杠正确转义,有些则没有。请发布您的实际代码,而不是仅仅说“试过了,没用。”

标签: c winapi cmd


【解决方案1】:

我看到以下问题:

  1. 您不会转义所有反斜杠字符。
  2. 这里不需要 cmd。直接启动可执行文件。
  3. CreateProcess 的第二个参数需要一个可修改的缓冲区,但您传递的是文字。由于实现细节,您通常使用 ANSI 来逃避它。但形式上是错误的。传递一个可修改的缓冲区。

另外一个问题是你如何声明和初始化si。我们看不到那个代码。

当然,也许您的代码没问题,但其他应用程序令人作呕。

【讨论】:

  • 无法初始化si 是一个很常见的错误。
猜你喜欢
  • 2014-03-06
  • 2012-01-03
  • 2017-02-28
  • 2020-07-24
  • 1970-01-01
  • 2018-10-05
  • 2017-10-18
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多