3

使用 SDK 和模拟器的 2012 年 6 月版本,我正在尝试在 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

显然下载开始了,但由于某种原因,它似乎没有完成。谁能告诉我为什么?

我想知道它是否与这个问题有关:Exception Downloading Azure Blob,但是针对我们的实时存储帐户运行它会以完全相同的方式失败。

我应该补充一点,我是一个相当有经验的 C# 程序员,但对 powershell 知之甚少,所以我或多或少地逐行遵循示例。而且我并不是真的在寻找解决方法 - 通过将其包含在项目中并将其设置为始终复制来打包此文件非常简单,但我将需要这种技术来处理其他更大的文件,所以想如果可能的话,让它工作。

4

2 回答 2

2

(将我的评论转换为答案)

我相信错误消息可能意味着容器不存在。您确定“startuputil”是您创建的容器的正确名称吗?

于 2012-08-30T07:59:38.237 回答
1

尝试像这样指定您的连接字符串:

$connection_string = 'UseDevelopmentStorage=true'

希望这可以帮助。

于 2012-08-29T15:24:26.167 回答