// コンソールアプリケーションを起動して標準出力をファイルにリダ
// イレクトさせる例

// 実行するコンソールアプリケーションのフルパスとリダイレクトの
// 出力先フルパス名
// 実際にはファイル参照で設定する等の工夫をして下さい
const
  //AppNameは'Program Files'のようにパス中に空白を含むと起動に
  //失敗します。また'"'で括ってもうまくいきません。
  //この問題を回避するためには8.3形式のパスに変換することが必要
  //と思われます。
  AppName = 'C:\xdoc2txt\xdoc2txt.exe';
  OutName = 'C:\Test.txt';

// CreateProcessに渡すコマンド
type
  Commd = record
    App,
    Param: string;
  end;

// 環境に応じたコマンドをセットする
// 95/98系とNT系ではコマンドのセットの仕方が異なります
function SetCommand: Commd;
var
  Version:TOSVERSIONINFO;
  sysdir: array[0..260] of char;
begin
  Version.dwOSVersionInfoSize := SizeOf(Version);
  if GetVersionEx(Version) then
    case Version.dwPlatformId of
      // Windows95/98
      VER_PLATFORM_WIN32_WINDOWS:
        begin
          // 95系の場合は全てコマンドラインパラメータで指定
          Result.App   := '';
          Result.Param := 'COMMAND.COM /C ';
        end;
      // WindowsNT/2000/XP
      VER_PLATFORM_WIN32_NT:
        begin
          GetSystemDirectory(sysdir, 260);
          // NT系の場合はアプリケーション名にC:\WINNT\SYSTEM32\CMD.EXE等
          // とフルパスで指定し、コマンドラインにはCMD.EXEのオプション
          // スイッチ(/C)から指定
          Result.App   := sysdir +'\CMD.EXE';
          Result.Param := '/C ';
        end;
    end;
end;

// コンソールアプリケーションの起動
procedure AppExec(FileName: string);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  prm: string;
  papp: PChar;
  cmd: Commd;
begin
  cmd := SetCommand;
  // コマンドライン作成
  prm := cmd.Param + AppName
            + ' "' + FileName + '" > "' + OutName + '"';
  if cmd.App = '' then
    papp := nil
  else
    papp := PChar(cmd.App);
  GetStartupInfo(SI);
  // コンソール(DOS窓)を隠した状態で起動する
  SI.wShowWindow := SW_HIDE;
  if not CreateProcess(papp,
          PChar(prm),
          nil, nil, False, CREATE_DEFAULT_ERROR_MODE,
          nil, nil, SI, PI)
  then
    Exit;
  // アプリケーションの終了待ち
  while WaitForSingleObject(PI.hProcess, 0) = WAIT_TIMEOUT Do
    Application.ProcessMessages;
end;

サンプルプロジェクトのダウンロード(2,145byte)