3

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アプリケーションではありません」というエラーで失敗します。

空のJava.exe

明らかにダウンロードが始まっていますが、何らかの理由でダウンロードが完了していないようです。誰か教えてもらえますか?

この問題に関連しているのではないかと思いました。AzureBlobのダウンロードの例外ですが、ライブストレージアカウントに対して実行すると、まったく同じように失敗します。

私はかなり経験豊富なC#プログラマーですが、PowerShellについてはほとんど知らないので、多かれ少なかれ例を1行ずつ追っています。そして、私は実際には回避策を探していません-このファイルをプロジェクトに含めて常にコピーするように設定することでこのファイルをパッケージ化するのは簡単ですが、他のより大きなファイルにはこの手法が必要になるので、可能であればそれを機能させます。

4

2 に答える 2

2

(私のコメントを回答に変換する)

エラーメッセージは、コンテナが存在しないことを意味している可能性があると思います。「startuputil」が作成したコンテナの正しい名前であると確信していますか?

于 2012-08-30T07:59:38.237 に答える
1

次のように接続文字列を指定してみてください。

$connection_string = 'UseDevelopmentStorage=true'

お役に立てれば。

于 2012-08-29T15:24:26.167 に答える