nsis !system 调用是否中断(调用 xcopy 时)?
Is nsis !system call broken (when calling xcopy)?
我正在使用最新的 3.0b2 版本并注意到通过 !system call 调用 xcopy 不起作用。
我有一个 xcopy 调用,它在通过命令行手动调用时运行完美,但在通过 !system 进行管道传输时无提示地失败。
(注意:我需要!system
,因为这是一个编译时操作,必须成功才能打包数据)
这是一个示例 nsi 脚本
!system 'xcopy'
!error "just exit"
调用 xcopy
应该 return 一些关于无效参数计数等的输出,但 xcopy 完全没有提示。如果我用 robocopy
替换它,我会得到一些输出。
真正奇怪的是:我启动了 Process Monitor 并观察了有效 xcopy 调用的 Process Start,它是这样的:
xcopy "d:\tool\*.pdb" "d:\dest\" /y /g /k /r /s /f
它复制了一切。但是后来我 运行 在 nsis 中与 !system
和 ProcMon 完全相同的行显示 完全 相同的进程启动调用。我区分了两个参数集、相同的工作目录、相同的命令行,但是通过 !system
的调用没有继续复制文件。 Procmon 甚至说第二次调用的退出代码为 0。
除了不复制文件外,一切都很酷。
XCopy 中的这个 seems to be a bug,如果没有有效的 StdIn 句柄,它将无法执行任何操作。这个错误似乎存在于几个使用未记录的 ulib.dll 库来处理其 input/output 的 Microsoft 工具中。
This Wine commit 声称 <= Win2003 需要控制台句柄,但匿名管道在 WinXP 上对我有用。
下一个 NSIS 版本将为 child 提供一个空的 StdIn 管道来解决这个错误,同时您可以使用:
!system 'xcopy < nul'
或
!system 'start /wait /min xcopy'
我正在使用最新的 3.0b2 版本并注意到通过 !system call 调用 xcopy 不起作用。
我有一个 xcopy 调用,它在通过命令行手动调用时运行完美,但在通过 !system 进行管道传输时无提示地失败。
(注意:我需要!system
,因为这是一个编译时操作,必须成功才能打包数据)
这是一个示例 nsi 脚本
!system 'xcopy'
!error "just exit"
调用 xcopy
应该 return 一些关于无效参数计数等的输出,但 xcopy 完全没有提示。如果我用 robocopy
替换它,我会得到一些输出。
真正奇怪的是:我启动了 Process Monitor 并观察了有效 xcopy 调用的 Process Start,它是这样的:
xcopy "d:\tool\*.pdb" "d:\dest\" /y /g /k /r /s /f
它复制了一切。但是后来我 运行 在 nsis 中与 !system
和 ProcMon 完全相同的行显示 完全 相同的进程启动调用。我区分了两个参数集、相同的工作目录、相同的命令行,但是通过 !system
的调用没有继续复制文件。 Procmon 甚至说第二次调用的退出代码为 0。
除了不复制文件外,一切都很酷。
XCopy 中的这个 seems to be a bug,如果没有有效的 StdIn 句柄,它将无法执行任何操作。这个错误似乎存在于几个使用未记录的 ulib.dll 库来处理其 input/output 的 Microsoft 工具中。
This Wine commit 声称 <= Win2003 需要控制台句柄,但匿名管道在 WinXP 上对我有用。
下一个 NSIS 版本将为 child 提供一个空的 StdIn 管道来解决这个错误,同时您可以使用:
!system 'xcopy < nul'
或
!system 'start /wait /min xcopy'