.net Azure启动任务挂起

.net Azure启动任务挂起,.net,azure,windows-server-2008,visual-c++-2012,.net,Azure,Windows Server 2008,Visual C++ 2012,我有一个带有MVC4角色的Azure项目,我在其中添加了安装文件,还有一个脚本以静默方式安装它 脚本正常工作并且库已安装,唯一的问题是任务从未完成,安装过程从未退出,这会阻止角色启动: 我使用远程桌面连接到服务器,通过查看任务管理器,我可以看到进程vcredit_x64.exe:(实际上有2个,但我认为这是正常的) 当我右键单击并终止流程时,部署成功完成,角色启动 当我的启动任务在ServiceDefinition.csdef中设置为simple时,这是一个问题,因为这会使服务器等待任务完成

我有一个带有MVC4角色的Azure项目,我在其中添加了安装文件,还有一个脚本以静默方式安装它

脚本正常工作并且库已安装,唯一的问题是任务从未完成,安装过程从未退出,这会阻止角色启动:

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

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

当我的启动任务在ServiceDefinition.csdef中设置为simple时,这是一个问题,因为这会使服务器等待任务完成后才能启动角色。因此,我所做的是将任务设置为后台,这样启动脚本就不会再阻止角色启动,但即使这样,进程仍在后台运行,必须手动终止

这个脚本应该可以工作,并且在2010年VC++库中使用过(虽然没有退出,但是应该存在,以避免在脚本返回错误代码时阻塞角色):

不起作用,所以我想在安装后手动终止进程:

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
中的日志显示一切正常


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

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

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

exit /b 0
它对我有用-startup是我保存vcredist_x64.exe的地方

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

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

多亏了史蒂夫·马克思(Steve Marx),我才明白为什么会发生这种情况

此问题仅在Windows Server 2008SP2中出现,因此我必须将主机更改为Windows Server 2008R2

这可以通过在所有ServiceConfiguration文件中将
osFamily=“1”
更改为
osFamily=“2”
来完成,也可以通过单击服务从Azure门户更改,然后在顶部配置操作系统。

您尝试过从RDP手动运行它(没有/quiet)吗?会发生什么?有错误吗?我只是得到一个对话框,在那里我可以修复,卸载或关闭。仅当Azure在部署时尝试运行该进程时,该进程才会挂起。我将在此处尝试更多操作,看看会发生什么。如果您使用/quiet运行该进程,我认为它会成功完成?您可能希望尝试psexec以本地系统用户身份运行。请参阅。是的,使用/quiet,它将成功运行并退出。我尝试psexec作为系统运行它,它运行得很好。我发布了另一个服务的解决方案,得到了相同的问题。项目中一定有一些配置错误,因为它显然适用于Ram。我在脚本中添加了
echo%ERRORLEVEL%>>c:\tasklog.txt
,但它没有创建文件,只有在手动运行脚本时才会创建,奇怪。我将设法缩小这个问题的范围。谢谢你迄今为止的帮助!我通过你链接的那篇文章看到了你的另一篇文章,读了你在底部写的关于将FamilyOS改为2的便条,它成功了!很好,你指出了这一点,谢谢:)谢谢你的回答,但是我们的脚本基本相同,除了start/w只生成一条命令行,它会阻止云上的安装,所以应该只在本地使用。
 <Task commandLine="startup\InstallVcreditst.cmd" executionContext="elevated" taskType="simple" />