4

Visual C ++ 2012ランタイムライブラリセットアップファイル を追加したMVC4ロールを持つAzureプロジェクトと、それをサイレントインストールするためのスクリプトがあります。

スクリプトが機能し、ライブラリがインストールされます。唯一の問題は、タスクが終了せず、インストールプロセスが終了しないことです。これにより、ロールの開始がブロックされます。 ロールインスタンス

リモートデスクトップを使用してサーバーに接続しました。タスクマネージャーを見ると、プロセスvcredist_x64.exeがわかります:(実際には2つですが、これは正常だと思います)

WindowsServerタスクマネージャー

プロセスを右クリックして強制終了すると、展開が正常に終了し、役割が開始されます。

これは、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すべてがうまくいったと言っています。

startup-taskを単純ではなくバックグラウンドに設定することで役割がブロックされないようにすることはできますが、それでも問題は解決しません。ありがとう。

4

2 に答える 2

1

Steve Marxによるこのブログ投稿のおかげで、なぜこれが起こっているのかがわかりました。

この問題はWindowsServer2008 SP2でのみ発生するためホストをWindows Server2008R2に変更する必要がありました。 これは、すべてのServiceConfigurationファイルでに変更することで実行できます。または、Azureポータルから、サービスをクリックして上部の[ OSの構成]をクリックすることで変更できます。
osFamily="1"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 に答える