我有一个具有 MVC4 角色的 Azure 项目,我在其中添加了Visual C++ 2012 运行时库 http://www.microsoft.com/en-us/download/details.aspx?id=30679安装文件,以及静默安装它的脚本。
The script works and the library gets installed, the only problem is that the task never finishes and the installation process never exits, which then blocks the role from starting:
我使用远程桌面连接到服务器,通过查看任务管理器我可以看到该进程vcredist_x64.exe:(实际上有2个,但我认为这很正常)
当我右键单击并终止进程时,部署成功完成并启动角色。
当我的启动任务设置为simple in 服务定义.csdef,因为这会使服务器等到任务完成才能启动角色。所以我所做的就是将任务设置为背景因此启动脚本不会再阻止角色启动,但即使如此,该进程仍在后台运行,必须手动终止。
该脚本应该可以工作,并且之前可以在 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
说一切顺利。
我可以通过将启动任务设置为后台而不是简单的方式来避免角色被阻止,但这并不能真正解决问题。谢谢。