Azure启动任务挂起

时间:2012-08-31 12:46:04

标签: .net azure windows-server-2008 visual-c++-2012

我有一个具有MVC4角色的Azure项目,其中我添加了Visual C++ 2012 Runtime Library安装文件,以及一个静默安装它的脚本。

脚本工作并且库已安装,唯一的问题是任务永远不会完成,安装过程永远不会退出,然后阻止角色启动: Role Instance

我使用远程桌面连接到服务器,通过查看任务管理器,我可以看到进程 vcredist_x64.exe :(其中2个实际上,但我认为这是正常的)

Windows Server Task Manager

当我右键单击并终止该进程时,部署成功完成并且角色已启动。

当我的启动任务在 ServiceDefinition.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尝试在部署期间执行它时,它会挂起。

My Start-up任务在ServiceDefinition.csdef中定义如下:

<Startup>
  <Task commandLine="InstallVcRedist.cmd" executionContext="elevated" taskType="background" />
</Startup>

C:\Resources\temp\{RoleId.RoleName}\RoleTemp中的日志表示一切正常。

我可以通过将启动任务设置为后台而不是简单来避免阻止该角色,但这并不能解决问题。感谢。

2 个答案:

答案 0 :(得分:1)

由于史蒂夫·马克思的this blog post,我弄清楚为什么会这样。

此问题仅发生在Windows Server 2008 SP2 中,因此我必须将主机更改为Windows Server 2008 R2 。 这可以通过在所有 ServiceConfiguration 文件中将osFamily="1"更改为osFamily="2"来完成,也可以通过单击服务然后配置从Azure门户更改它操作系统位于顶部。

答案 1 :(得分:0)

我也需要使用这个库。 这是我的剧本:

start /w
cd startup
vcredist_x64.exe /q /norestart

exit /b 0

它对我有用 - 启动是我保留vcredist_x64.exe的地方。

在我的servicedefinition文件中,这是xml行

 <Task commandLine="startup\InstallVcreditst.cmd" executionContext="elevated" taskType="simple" />
相关问题