2012-08-31 206 views
4

我有一個具有MVC4角色的Azure項目,其中我添加了Visual C++ 2012 Runtime Library安裝文件以及一個用於以靜默方式安裝它的腳本。Azure啓動任務掛起

該腳本和庫安裝的功能,唯一的問題是,任務無法完成,安裝過程永遠不會退出,然後阻止從開始的角色:我使用遠程連接到服務器 Role Instance

桌面,並通過查看任務管理器,我可以看到進程vcredist_x64.exe:(他們實際上是2,但我認爲這是正常的)

Windows Server Task Manager

當我用鼠標右鍵單擊並終止進程,部署成功完成,角色啓動。

這是當我啓動任務設置爲簡單ServiceDefinition.csdef中,因爲這使服務器等到任務完成後啓動角色的問題。所以我所做的就是將任務設置爲背景,所以啓動腳本不會阻止角色再次啓動,但即使如此,該過程仍在後臺運行,必須手動終止。

這個腳本應該工作,並與2010年的VC++庫有前(如果沒有退出,雖然,但應該是有,以避免阻塞的作用,如果腳本返回錯誤代碼):

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日誌說一切正常。

我可以避免通過將啓動任務設置爲背景而不是簡單地阻止角色被阻止,但這並不能真正解決問題。謝謝。

+0

您是否嘗試過從RDP手動運行(沒有/ quiet)?怎麼了?有錯誤嗎? – smarx

+0

我剛剛得到可以修復,卸載或關閉的對話框。只有當Azure在部署時嘗試運行它時,此過程纔會掛起,我會在此處嘗試一些更多的事情,看看會發生什麼。 –

+1

如果你用/ quiet運行它,我認爲它成功完成了?您可能想嘗試使用psexec作爲本地系統用戶運行。請參閱http://blog.smarx.com/posts/windows-azure-startup-tasks-tips-tricks-and-gotchas。 – smarx

回答

1

我想通了,爲什麼這個由史蒂夫·馬克思的發生,這要歸功於this blog post

此問題只在Windows Server 2008出現SP2 ,所以只好將主機更改爲Windows Server 2008 R2
這可以通過在所有的ServiceConfiguration文件的改變osFamily="1"osFamily="2"來完成,也可以從Azure的門戶網站通過單擊服務,然後配置OS頂部被改變。

0

我也需要使用這個庫。 這是我的腳本:

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

exit /b 0 

它的工作對我來說 - 啓動是我保持vcredist_x64.exe。

我的服務定義文件,這是XML線

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

感謝您的答案,但我們的腳本幾乎完全相同,除了只生成命令行的開始/ w,它會阻止雲上的安裝,所以它應該只在本地使用。 –