我正在尝试将VBS文件作为Azure批处理任务启动,并且不断收到错误消息,指出找不到脚本文件。
这是一个有效的命令:
string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
string taskCommandLine = String.Format("cmd /c {0}\\ffmpeg-3.4-win64-static\\bin\\ffmpeg.exe -i {1} -vcodec libx264 -crf 28 -c:a aac -b:a 128k {2} & del {3} & rename {4} {5}", appPath, inputMediaFile, outputMediaFile, inputMediaFile, outputMediaFile, inputMediaFile);
这是正确的,但是在输入文件上触发ffmpeg之前,我想先对ffprobe进行一些检查,然后再使用.bat进行替换,因此我想在VBScript中做到这一点。
string appPath = String.Format("%AZ_BATCH_APP_PACKAGE_{0}#{1}%", appPackageId, appPackageVersion);
string taskCommandLine = String.Format("cmd /c cscript {0}\\ffmpeg-3.4-win64-static\\bin\\scan_run1.vbs {1} {2}", appPath, inputMediaFile, outputMediaFile);
这将导致:
Microsoft(R)Windows脚本主机版本5.8版权所有(C)Microsoft 公司。保留所有权利。
输入错误:找不到脚本文件 “ D:\ batch \ tasks \ applications \ ffmpeg3.42019-02-01-19-50 \ ffmpeg-3.4-win64-static \ bin \ scan_run1.vbs”
我非常确定vb在那里,因为在完全相同的位置调用ffmpeg.exe可以正常工作。
当我将其作为包上传时,Azure门户是否从ZIP文件中剥离了VBS?那里发生了什么事?
谢谢。
结果证明,替换我的应用程序包时,Azure Portal不会更新。因此,即使我那头的ZIP文件有“ scan_run.vbs”,也没有“ scan_run1.vbs”。
答案 0 :(得分:4)
这将有助于更好地理解,实质上,简短的答案是这样的:
此处引用的文档:https://docs.microsoft.com/en-us/azure/batch/batch-application-packages
类似于池,您可以为池指定应用程序包引用。 任务。当任务计划在节点上运行时,软件包为 在任务的命令行之前下载并提取 被执行。 如果已安装指定的软件包和版本 节点,该软件包未下载,而现有软件包为 使用。
详细信息
就像我在评论中提到的那样,如果您有不同版本的应用程序包,建议使用。
很高兴您正在探索这些错误,因为这将有助于围绕您的应用程序更好地设计这一概念。
建议
例如:If you have all tasks sharing same application package, I would recommend using Pool Level app pkgs
https://docs.microsoft.com/en-us/azure/batch/batch-application-packages#install-pool-application-packages
If you have task level and you are changing the content of existing app pkgs
,然后使用带有版本的应用pk并通过不同的应用pkg内容使版本不同。
此处详细介绍了版本的工作原理:
其他:
关于多少个环境变量和类型的详细信息:https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables
常见陷阱
non async
的行为会导致问题,因此请务必等待以便在Batch创建一个池并继续之前完成升级。