我有一个具有 MVC4 角色的 Azure 项目,我在其中添加了Visual C++ 2012 运行时库设置文件,以及一个静默安装它的脚本。
脚本工作并且库被安装,唯一的问题是任务永远不会完成并且安装过程永远不会退出,这会阻止角色启动:
我使用远程桌面连接到服务器,通过查看任务管理器,我可以看到进程vcredist_x64.exe:(实际上有 2 个,但我认为这是正常的)
当我右键单击并终止该进程时,部署成功完成并启动角色。
当我的启动任务在ServiceDefinition.csdef中设置为simple时,这是一个问题,因为这会使服务器等到任务完成才能启动角色。所以我所做的就是将任务设置为后台,这样启动脚本就不会阻止角色启动了,但即便如此,该进程仍在后台运行,必须手动终止。
该脚本应该可以工作,并且以前使用过 2010 VC++ 库(虽然没有 EXIT,但应该存在以避免在脚本返回错误代码时阻止角色):
vcredist_x64.exe /quiet /norestart
EXIT /B 0
没用,所以我想我会在安装后手动终止该进程:
vcredist_x64.exe /quiet /norestart
TASKKILL /F /T /IM vcredist_x64.exe
EXIT /B 0
没有工作,过程仍然存在。如果我自己在服务器上或本地手动运行该脚本实际上可以工作,但是当 Azure 在部署期间尝试执行此操作时,它会挂起。
我的启动任务在 ServiceDefinition.csdef 中定义如下:
<Startup>
<Task commandLine="InstallVcRedist.cmd" executionContext="elevated" taskType="background" />
</Startup>
登录C:\Resources\temp\{RoleId.RoleName}\RoleTemp
说一切顺利。
我可以通过将启动任务设置为后台而不是简单来避免角色被阻止,但这并不能真正解决问题。谢谢。