2012年6月バージョンのSDKとエミュレーターを使用して、次の例に従って、Azureワーカーの役割にJavaランタイム実行可能ファイルをインストールしようとしています:http://code.msdn.microsoft.com/windowsazure/Installing-Java-in -Web-94f145dd#content。
x64インストーラーをblobとしてアップロードし、名前を「Java.exe」に変更しました(ファイル名を少し見やすくするため)。
Azure Storage Explorerで確認すると、blobがそこにあり、正しいサイズ(31MB)であることがわかります。
例に従って、次のスタートアップタスクを使用します。
<Startup>
<Task commandLine="Run.cmd" executionContext="elevated" taskType="background" />
</Startup>
このコマンドを呼び出すには:
powershell -executionpolicy unrestricted -file .\Launch.ps1
start /w Java.exe /s
これにより、このPowerShellスクリプトが呼び出されます。
function download_from_storage ($container, $blob, $connection, $destination) {
Add-Type -Path ((Get-Location).Path + '\Microsoft.WindowsAzure.StorageClient.dll')
$storageAccount = [Microsoft.WindowsAzure.CloudStorageAccount]::Parse($connection)
$blobClient = New-Object Microsoft.WindowsAzure.StorageClient.CloudBlobClient($storageAccount.BlobEndpoint, $storageAccount.Credentials)
$remoteBlob = $blobClient.GetBlobReference($container + '/' + $blob)
$remoteBlob.DownloadToFile($destination + "\" + $blob)
}
$connection_string = 'DefaultEndpointsProtocol=https;AccountName=devstoreaccount1; AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=='
# JRE
$jre = 'Java.exe'
download_from_storage 'startuputil' $jre $connection_string (Get-Location).Path
これは機能し、エミュレータがローカルディスクに作成するapprootを参照すると、そこにJava.exeが表示されますが、ファイルサイズは0KBであり、実行は「有効なWin32アプリケーションではありません」というエラーで失敗します。
明らかにダウンロードが始まっていますが、何らかの理由でダウンロードが完了していないようです。誰か教えてもらえますか?
この問題に関連しているのではないかと思いました。AzureBlobのダウンロードの例外ですが、ライブストレージアカウントに対して実行すると、まったく同じように失敗します。
私はかなり経験豊富なC#プログラマーですが、PowerShellについてはほとんど知らないので、多かれ少なかれ例を1行ずつ追っています。そして、私は実際には回避策を探していません-このファイルをプロジェクトに含めて常にコピーするように設定することでこのファイルをパッケージ化するのは簡単ですが、他のより大きなファイルにはこの手法が必要になるので、可能であればそれを機能させます。