4

我有一个具有 MVC4 角色的 Azure 项目,我在其中添加了Visual C++ 2012 运行时库设置文件,以及一个静默安装它的脚本。

脚本工作并且库被安装,唯一的问题是任务永远不会完成并且安装过程永远不会退出,这会阻止角色启动: 角色实例

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

Windows 服务器任务管理器

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

当我的启动任务在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说一切顺利。

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

4

2 回答 2

1

多亏了史蒂夫·马克思的这篇博文,我才知道为什么会发生这种情况。

此问题仅在 Windows Server 2008 SP2中出现,因此我不得不将主机更改为 Windows Server 2008 R2
这可以通过在所有ServiceConfigurationosFamily="1"文件中更改为来完成,或者可以通过单击服务然后在顶部的配置操作系统从 Azure 门户进行更改。osFamily="2"

于 2012-09-03T14:21:18.627 回答
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" />
于 2012-09-02T06:39:01.533 回答