我正在尝试在 Perl Windows 中构建一个快速的自动更新程序。我注意到,当我调用cpanp安装包的更新时,它无法安装新版本的脚本,因为脚本当前正在运行。我正在打电话cpanp。CORE::system()如果我打电话cpanp,exec()那会释放可执行文件以进行替换吗?或者,即使执行已完全移交给 Windows 是否仍将其捆绑cpanp?
目前,我的流程看起来像这样,
- 从服务器下载META.yml
- 解析出 META.yml 的版本
- 对比现在的
$VERSION- 如果当前版本较低,则使用 META.yml 中的数据生成版本字符串
- 使用 META.yml 的主机/路径和版本/数据信息生成打包的 URL
- 通知用户更新
- Spawn
cpanp使用 URL 运行更新。
- 如果当前版本相同
- 没做什么
- 如果当前版本较低,则使用 META.yml 中的数据生成版本字符串
在替换可执行文件方面与 Win32 上的行为会system()有所不同吗?exec()在 Linux 上,它按设计工作。