Delphi 7:如何执行shell命令并检查结果?

Maw*_*awg 2 delphi

我正在使用Delphi 7,无法预测Windows的目标版本.

我需要创建一个数据库(可能是MySql,但可能是其他东西)并定义一些表结构.我不需要填充任何数据.不幸的是,所有ADO组件似乎都期望数据库已经存在,然后它们将允许您操作它.

所以,因为它只是一些简单的命令,我认为我不妨使用ShellExectute().

同意?不同意?

任何人都可以给我一个示例代码,它将尝试运行"MySql --version"并让我检查结果吗?在那之后,我应该能够为自己解决这个问题.谢谢.


[编辑]

没有违法行为,但我知道如何谷歌.只是我找不到有用的结果.在这个问题中不明确是我自己的错,所以请接受我的道歉 - 我需要的是代码示例,而不仅仅是组件的名称.

对不起(感谢迄今为止的回复(所有这些都是+1))


[编辑]

Robert给出的链接可以完成这项工作(程序RunDosInMemo()可以解决这个问题)... 但是 你必须记住包含一个.exe扩展名(所以,'notepad.exe',而不仅仅是'notepad',以及ge如果您的命令不在路径上,则为path.

Rob*_*ove 7

这篇文章解释了它的细节

从DOS(命令/控制台)窗口捕获输出

但总之,您需要创建两个管道来读取和写入输出.然后,您需要在TStartUpInfo结构中设置StdInput和StdOutput ,然后将此结构传递给 CreateProcess()调用.

这是另一篇文章,展示了如何等待该过程完成.


gab*_*abr 5

使用DSiWin32中的DSiExecuteAndCapture:

var
  exitCode: integer;
  output  : TStringList;
begin
  output := TStringList.Create;
  try
    if DSiExecuteAndCapture('mysql --version', output, '', exitCode) = 0 then
      Log(Format('error %d, cannot start', [GetLastError])) 
    else begin
      // check exitCode and output
    end;
  finally FreeAndNil(output); end;
end;
Run Code Online (Sandbox Code Playgroud)