如何从启动任务访问Azure本地存储?

时间:2011-07-13 12:53:07

标签: windows deployment azure cloud local-storage

在我的Azure角色启动任务中,我需要部署我的本机C ++应用程序。我是通过从.cmd文件运行一组操作来实现的。

问题在于角色内容所在的E:\驱动器以及运行启动任务的驱动器只有大约1千兆字节的可用空间,而这对于部署该应用程序来说还不够。

我当然可以在服务定义中询问本地存储,但是我找不到如何从启动任务获取本地存储所在位置的实际路径 - 那里有RoleEnvironment.GetLocalResource()但是它似乎只能从角色代码中获得,我需要在启动任务中执行相同的操作。

如何从启动任务中检测本地存储的路径?

3 个答案:

答案 0 :(得分:3)

您可以编写C#或PowerShell来执行此操作。目前,我首选的方法是以下PowerShell脚本:

param($name)
[void]([System.Reflection.Assembly]::LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime"))
write-host ([Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment]::GetLocalResource($name)).RootPath.TrimEnd('\\')

然后我根据需要从批处理文件中调用:

powershell -c "set-executionpolicy unrestricted"
for /f %%p in ('powershell .\getLocalResource.ps1 MyStorage') do set LOCALPATH=%%p

编辑:另请参阅http://blog.smarx.com/posts/using-a-local-storage-resource-from-a-startup-task,相同的答案,但在我的博客上。

答案 1 :(得分:3)

如果我没记错的话,我们正在使用Azure Bootstrapper。这很方便,如果你不熟悉它,你不必处理PowerShell的复杂问题。

此刻我不是100%肯定,但我记得它也有本地资源访问权限,所以你可以使用它。

答案 2 :(得分:0)

如何从启动任务中检测本地存储的路径?

使用本地存储在启动期间存储文件

<!-- Create the Local Storage used by the startup task. -->
    <LocalResources>
      <LocalStorage name="StartupLocalStorage" sizeInMB="5"/>
    </LocalResources>

    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple">
        <Environment>

          <!-- Create the environment variable that informs the startup task where to find its Local 
               Storage. %PathToStartupStorage% resolves to the fully qualified path to the location 
               of the Local Storage.-->
          <Variable name="PathToStartupStorage">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='StartupLocalStorage']/@path" />
          </Variable>

        </Environment>
      </Task>
    </Startup>

您可以使用启动脚本中的本地环境变量PathToStartupStorage%PathToStartupStorage%进行访问

更多参考:http://msdn.microsoft.com/en-us/library/azure/hh974419.aspx