如何在Inno Setup的输出重定向的工作?(How does output redirectio

2019-06-26 05:28发布

我在这里看到了这样一个问题: 如何让创新安装的Exec'ed程序的输出?

但我不能得到它的工作我自己,注释掉的代码是我的尝试,使这项工作,但我使出一个bat文件,因为我不能让我的工作重定向。 CacheInstanceNameCacheInstanceDir是别处定义的全局变量:

function CheckCacheExists(): Integer;
var
  args: String;
  buffer: String;
  ResultCode: Integer;
begin
  // args := 'qlist ' + CacheInstanceName + ExpandConstant(' nodisplay > {tmp}\appcheck.txt');
  // MsgBox(args, mbInformation, MB_OK);
  // Exec(CacheInstanceDir + '\bin\ccontrol.exe', 'qlist ' + CacheInstanceName + ExpandConstant(' nodisplay > "{tmp}\appcheck.txt"'), '', SW_SHOW,

  ExtractTemporaryFile('checkup.BAT');
  Exec(ExpandConstant('{tmp}\checkup.BAT'), CacheInstanceDir + ' ' + 
    CacheInstanceName + ' ' + ExpandConstant('{tmp}'), '', SW_SHOW,
    ewWaitUntilTerminated, ResultCode);
  LoadStringFromFile(ExpandConstant('{tmp}\appcheck.txt'),buffer);
  if Pos('^', buffer) = 0 then
  begin
    Result := 0
  end
  else 
  begin
    Result := 1
  end 
end;

我究竟做错了什么?

Answer 1:

输出重定向语法是在命令提示符,而不是Windows核心API的功能。 因此,如果你想重定向输出,那么你需要调用通过命令{cmd} /c actual-command-line > output-file 。 不要忘了,包括报价在适当情况下,如{tmp} (和其他常量)可能包含空格。

但是,你应该认真考虑重写无论是在该批处理文件到实际的代码。 任何你可以在批处理文件中,你可以做直接在脚本的Inno或您从脚本调用DLL做。 这允许你在错误检查和要检索的任何数据的格式更大的控制权。



Answer 2:

尝试直接与您的参数在命令行上运行该命令args串看到的结果是什么,其可能给问题的指示。

另外,检查你想你的输出重定向到文件不是由另一个进程使用。 我发现,当这种情况发生时的实际命令会以成功执行Exec命令,返回True ,但ResultCode指示错误并没有输出被写入重定向使用的文件。 在该文件的该特定情况下正在使用的另一个实例的SysErrorMessage(ResultCode)命令返回简单地Incorrect function 。 然而,直接在命令行上进行测试,因为我提到的第一返回该文件是在使用由另一个进程。



文章来源: How does output redirection work in Inno Setup?