【发布时间】:2012-08-31 12:46:04
【问题描述】:
我有一个带有 MVC4 角色的 Azure 项目,我在其中添加了 Visual C++ 2012 Runtime Library 安装文件和一个静默安装它的脚本。
脚本运行并且库被安装,唯一的问题是任务永远不会完成并且安装过程永远不会退出,然后阻止角色启动:
我使用远程桌面连接到服务器,通过查看任务管理器可以看到进程vcredist_x64.exe:(实际上有2个,但我认为这是正常的)
当我右键单击并终止进程时,部署成功完成并启动角色。
当我的启动任务在 ServiceDefinition.csdef 中设置为 simple 时,这是一个问题,因为这会使服务器等到任务完成才能启动角色。所以我所做的就是将任务设置为 background 以便启动脚本不再阻止角色启动,但即便如此,该进程仍在后台运行并且必须被杀死手动。
这个脚本应该可以工作,并且以前在 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 中的日志表明一切正常。
我可以通过将启动任务设置为后台而不是简单来避免角色被阻止,但这并不能真正解决问题。谢谢。
【问题讨论】:
-
您是否尝试过从 RDP 手动运行它(没有 /quiet)?发生什么了?有错误吗?
-
我只是得到可以修复、卸载或关闭的对话框。该进程仅在 Azure 尝试在部署时运行它时挂起,我将在此处尝试更多操作,看看会发生什么。
-
如果您使用 /quiet 运行它,我认为它会成功完成?您可能想尝试 psexec 以本地系统用户身份运行。见blog.smarx.com/posts/…。
-
是的,使用 /quiet 会成功运行并退出。我尝试 psexec 以 SYSTEM 身份运行它,它运行良好。我将解决方案发布到不同的服务并遇到了同样的问题。项目中必须配置错误,因为它显然适用于 Ram。我在脚本中添加了
echo %ERRORLEVEL% >> c:\tasklog.txt,但它没有创建文件,只有当我手动运行脚本时它才会创建,奇怪。我会尝试缩小问题的范围。感谢您迄今为止的帮助! -
我通过您链接的帖子看到了您的另一篇帖子,并阅读了您在底部关于将 FamilyOS 更改为 2 的说明,并且成功了!你指出来是件好事,谢谢:)
标签: .net azure windows-server-2008 visual-c++-2012