【问题标题】:How does output redirection work in Inno Setup?输出重定向如何在 Inno Setup 中工作?
【发布时间】:2012-07-11 21:42:24
【问题描述】:

我在这里看到了这个问题:How to get an output of an Exec'ed program in Inno Setup?

但是我自己不能让它工作,注释掉的代码是我试图让它工作,但我求助于一个 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;

我做错了什么?

【问题讨论】:

  • 附带说明,经过进一步测试,我发现只有第一个参数“qlist”被通过。我一直在努力思考我可能做错了什么,但也许它与重定向无关。此外,我可以在调试器中看到所有变量都已填充,并且它们显然正确显示在消息框中。
  • 能否更具体一点,无法正常工作不是描述问题的好方法。您是否尝试检查在您的 ResultCode 中返回 Exec 函数的内容? Exec 函数也有一个返回值,如果它失败(返回 False)那么你很可能传递了错误的参数。
  • TLama,你的评论很贴切,所以我在上面评论。

标签: installation inno-setup


【解决方案1】:

输出重定向语法是命令提示符的一项功能,而不是核心 Windows API。因此,如果要重定向输出,则需要通过{cmd} /c actual-command-line > output-file 调用命令。不要忘记在适当的地方加上引号,因为{tmp}(和其他常量)可能包含空格。

但是,您应该强烈考虑将该批处理文件中的任何内容重写为实际代码。您可以在批处理文件中执行的任何操作都可以直接在 Inno 脚本或从脚本调用的 DLL 中执行。这使您可以更好地控制错误检查和要检索的任何数据的格式。

【讨论】:

  • 这很有趣,是另一个问题的答案所说的(只是不太详细:)
【解决方案2】:

尝试使用args 字符串中的参数直接在命令行上运行该命令,看看结果如何,这可能表明存在问题。

此外,请检查您尝试将输出重定向到的文件是否未被其他进程使用。我发现发生这种情况时,实际命令可能会成功执行,Exec 命令返回True,但ResultCode 表示错误,并且没有输出写入重定向中使用的文件。在另一个实例正在使用的文件的这个特定实例中,SysErrorMessage(ResultCode) 命令仅返回Incorrect function。但是,正如我首先提到的,直接在命令行上进行测试会返回该文件正在被另一个进程使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多