2011-07-13 82 views
1

在我的Azure角色啓動任務中,我需要部署我的本地C++應用程序。我通過從.cmd文件運行一組操作來實現這一點。如何從啓動任務訪問Azure本地存儲?

問題是E:\驅動器位於角色內容所在的位置以及運行啓動任務的位置僅有約1千兆字節的可用空間,這不足以部署該應用程序。

我當然可以在服務定義中要求本地存儲,但我找不到如何從啓動任務中獲取本地存儲位置的實際路徑 - 這裏有RoleEnvironment.GetLocalResource(),但它似乎只能從角色代碼中獲得,我需要從啓動任務中執行相同的操作。

如何從啓動任務檢測到本地存儲的路徑?

回答

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

另外值得一讀的如何定義啓動腳本:http://msdn.microsoft.com/en-us/library/gg456327.aspx –

3

如果我沒有記錯,我們使用Azure Bootstrapper。這很方便,如果您不熟悉PowerShell,您不必處理PowerShell的複雜問題。

我不能在這個時候100%肯定,但我記得它具有本地資源的訪問一樣,所以你可以使用它。

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

相關問題