nsis!系统调用是否中断(调用xcopy时)?

时间:2015-09-01 12:59:43

标签: nsis

我正在使用最新的3.0b2版本,并注意到通过!系统调用调用xcopy不起作用。

我有一个xcopy调用,当通过命令行手动调用时可以完美地工作,但是在通过!系统管理它时会无声地失败。

(注意:我需要!system,因为这是一个编译时操作,必须先成功才能打包数据)

以下是nsi脚本示例

!system 'xcopy'
!error "just exit"

调用xcopy应该返回一些关于无效参数计数等的输出,但xcopy完全是静默的。如果我用robocopy替换它,我会得到一些输出。

真奇怪的是:我启动了Process Monitor并观看了有效xcopy调用的Process Start,它是这样的:

xcopy "d:\tool\*.pdb" "d:\dest\"  /y /g /k /r /s /f

它复制了一切。但后来我用!system在nsis中运行完全相同的行,并且ProcMon显示完全相同的Process start调用。我对两个参数集,相同的工作目录,相同的命令行进行了区分,但是通过!system的调用没有继续复制文件。 Procmon甚至说第二次调用的退出代码为0。

除了不复制文件外,一切都很酷。

1 个答案:

答案 0 :(得分:1)

seems在XCopy中为bug,如果没有有效的StdIn句柄,则无法执行任何操作。这个错误似乎存在于几个使用未记录的ulib.dll库来处理其输入/输出的Microsoft工具中。

This Wine commit声称< = Win2003需要一个控制台句柄,但匿名管道在WinXP上为我工作。

下一个NSIS版本将为孩子提供一个空的StdIn管道来解决这个bug,同时你可以使用:

!system 'xcopy < nul'

!system 'start /wait /min xcopy'