我正在使用最新的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。
除了不复制文件外,一切都很酷。
答案 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'