我正在尝试在 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 上,它按设计工作。