Installation 在Inno设置中,输出重定向是如何工作的?

Installation 在Inno设置中,输出重定向是如何工作的?,installation,inno-setup,Installation,Inno Setup,我在这里看到了这个问题: 但我自己无法让它工作,注释掉的代码是我尝试使其工作的代码,但我求助于bat文件,因为我无法使重定向工作CacheInstanceName和CacheInstanceDir是在别处定义的全局变量: 函数CheckCacheExists():整数; 变量 args:字符串; 缓冲区:字符串; 结果代码:整数; 开始 //参数:='qlist'+CacheInstanceName+ExpandConstant('nodisplay>{tmp}\appcheck.txt');

我在这里看到了这个问题:

但我自己无法让它工作,注释掉的代码是我尝试使其工作的代码,但我求助于bat文件,因为我无法使重定向工作
CacheInstanceName
CacheInstanceDir
是在别处定义的全局变量:

函数CheckCacheExists():整数;
变量
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,
提取临时文件('checkup.BAT');
Exec(ExpandConstant('{tmp}\checkup.BAT'),CacheInstanceDir+''
CacheInstanceName+''+ExpandConstant('{tmp}'),'',SW_SHOW,
EWWAIT未过滤,结果代码);
LoadStringFromFile(ExpandConstant({tmp}\appcheck.txt'),缓冲区);
如果位置('^',缓冲区)=0,则
开始
结果:=0
结束
其他的
开始
结果:=1
结束
结束;

我做错了什么?

输出重定向语法是命令提示符的一个功能,而不是Windows的核心API。因此,如果要重定向输出,则需要通过
{cmd}/c实际命令行>输出文件
调用该命令。不要忘记在适当的地方包括引号,如
{tmp}
(和其他常量)可以包含空格


但是,您应该强烈考虑将批处理文件中的任何内容改写为实际代码。您可以在批处理文件中做任何事情,您可以直接在iNo脚本中或在脚本中调用的DLL中执行。这允许您更大程度地控制错误检查和要检索的任何数据的格式。

使用

args
字符串中的参数直接在命令行上运行命令,以查看结果,这可能会指示问题


另外,请检查您试图重定向输出到的文件是否未被其他进程使用。我发现,当发生这种情况时,实际命令可能会成功执行,而
Exec
命令返回
True
,但
ResultCode
指示错误,并且不会将任何输出写入re中使用的文件在另一个实例正在使用的文件的这个特定实例中,
SysErrorMessage(ResultCode)
命令只返回
不正确的函数
。但是,如我前面提到的,直接在命令行上测试会返回文件正被另一个进程使用。

作为补充说明,在进一步测试后,我发现只有第一个参数“qlist”正在通过。我一直在绞尽脑汁想我可能做错了什么,但可能与重定向无关。此外,我可以在调试器中看到所有变量都已填充,并且它们显然正确地显示在消息框中。能否更具体地说,无法使其工作不是描述y的好方法我们的问题。您是否尝试过检查在
ResultCode
中返回
Exec
函数的内容?
Exec
函数也有返回值,如果失败(返回False)那么你很可能给它传递了错误的参数。特拉玛,你的评论很贴切,因此我在上面发表了评论。有趣的是,这就是另一个问题的答案所说的(只是不够详细:)