我有一个Azure项目,其中包含一个MVC4角色,我已经添加了Visual C++ 2012 Runtime Library安装文件和一个脚本来静默安装它。
脚本可以正常工作并安装库,唯一的问题是任务永远不会完成,安装过程也永远不会退出,这将阻止角色启动:
我使用远程桌面连接到服务器,并通过任务管理器查看进程vcredist_x64.exe:(实际上有两个,但我认为这是正常的)
当我的启动任务在ServiceDefinition.csdef中被设置为“简单”时,这就成为了一个问题,因为这使得服务器等待任务完成后才启动角色。因此,我将任务设置为“后台”,这样启动脚本就不会再阻止角色启动,但即便如此,进程仍在后台运行,需要手动结束。
这个脚本应该可以工作,并且在使用2010 VC++库时也已经工作过(没有EXIT,但是应该加上以避免如果脚本返回错误代码而阻止角色)。
无法正常工作,进程仍然在运行。如果我在服务器上手动运行脚本或本地运行,则脚本实际上可以正常工作,但是当Azure尝试在部署期间执行它时,它会挂起。
我的启动任务在ServiceDefinition.csdef中定义如下:
脚本可以正常工作并安装库,唯一的问题是任务永远不会完成,安装过程也永远不会退出,这将阻止角色启动:
![Role Instance](https://istack.dev59.com/8KIHl.webp)
当我的启动任务在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尝试在部署期间执行它时,它会挂起。
我的启动任务在ServiceDefinition.csdef中定义如下:
<Startup>
<Task commandLine="InstallVcRedist.cmd" executionContext="elevated" taskType="background" />
</Startup>
C:\Resources\temp\{RoleId.RoleName}\RoleTemp
中的日志显示一切都正常。
我可以通过将启动任务设置为后台而不是简单的方式来避免角色被阻止,但这并不能真正解决问题。谢谢。
echo %ERRORLEVEL% >> c:\tasklog.txt
语句,但它没有创建文件。只有手动运行脚本时才会创建文件,这很奇怪。我会努力缩小问题范围。感谢迄今为止提供的帮助! - Shahin Dohan