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

是nsis!系统调用中断(调用xcopy时)?,nsis,Nsis,我正在使用最新的3.0b2版本,并注意到通过!系统调用不起作用 我有一个xcopy调用,当通过命令行手动调用时,它可以完美地工作,但当通过管道传输时,它会默默地失败!系统 (注意:我需要!system,因为这是一个编译时操作,必须成功才能打包数据) 下面是一个nsi脚本示例 !system 'xcopy' !error "just exit" 调用xcopy应该返回一些关于无效参数计数等的输出,但是xcopy是完全静默的。如果我用robocopy替换它,我会得到一些输出 真正奇怪的是:我启动了

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

我有一个xcopy调用,当通过命令行手动调用时,它可以完美地工作,但当通过管道传输时,它会默默地失败!系统

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

下面是一个nsi脚本示例

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

真正奇怪的是:我启动了进程监视器,并观看了一个有效的xcopy调用的进程启动,它是这样的:

xcopy "d:\tool\*.pdb" "d:\dest\"  /y /g /k /r /s /f
它复制了一切。但后来我在nsis中用
运行了完全相同的行!系统
和ProcMon精确地显示了相同的进程启动调用。我区分了两个参数集,相同的工作目录,相同的命令行,但是调用是通过
!系统
未继续复制文件。Procmon甚至说第二个调用的退出代码为0

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

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


声称如果我在nsis中调用xcopy,这确实有效,对于我调用powershell的场景,powershell反过来调用xcopy,但将null传递给powershell就成功了。你是如何将其与NSIS联系起来的?我以前做过很多。@Samuel:我知道!NSISv3中的系统发生了变化,因为当它获得Unicode支持时,我重写了它。旧版本只是使用了system()c库函数,新版本是纯Win32和管道。我最初认为这是一个代码页转换问题,但在排除这个问题后,我调查了管道,并尝试添加一个stdin管道作为其中的一部分……您的回答表明这是可以的,我无法从谷歌搜索中推断出解决方案:)
!system 'xcopy < nul'
!system 'start /wait /min xcopy'