2011-04-28 60 views
2

我有一個XML文件,我是個試着從Windows Azure的Environment.GetEnvironmentVariable(「RoleRoot」)讀取訪問被拒絕錯誤

string xmlTemplatePath = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\myxml.xml"); 

使用XDocument doc = XDocument.Load(xmlTemplatePath)讀,但是我收到拒絕訪問例外都在雲上和發展環境。任何想法爲什麼閱讀被拒絕?

+0

我有完全相同的問題 - File.Open(filename,FileMode.Open)拋出拒絕訪問異常。該文件當然存在(File.Exists(filename)返回true)。你是否設法解決這個問題? – 2012-04-24 00:06:46

回答

0

對我來說很好。我甚至抓住你的代碼並將它放到一個工作者角色中,在我的項目根目錄下創建myxml.xml之後,從OnStart()調用它,以確保我沒有丟失明顯的東西。

檢查myxml.xml屬性:「Build Action」應爲「Content」,「Copy to Output Directory」應爲「Copy always」或「Copy if newer」。如果這不能解決它,請檢查該文件的權限。

1

我知道,老線索......但答案可能對某些人有用。

似乎一個天青工作進程在自定義用戶下運行(在taskmgr中顯示爲GUID)。這個用戶帳戶看起來是相當有限的,並且沒有對文件系統的讀取權限(甚至在approot目錄內)。

我的解決方案是爲azure角色創建啓動腳本(請參閱msdn article),該腳本使用icacls來添加訪問文件的權限。在這種情況下,我創建了一個名爲啓動\ INSTALL.CMD在我的項目文件,其中包含以下內容:

@echo off 

if "%EMULATED%"=="true" goto :EOF 

echo Allowing access to files 
cd directory_where_files_exist 
icacls *.* /grant Everyone:F 

在我ServiceDefinition.csdef中的文件,我指示Azure的部署系統的部署過程中運行此啓動腳本把這個角色定義中(如<WorkerRole>):

<Startup> 
    <Task executionContext="elevated" commandLine="startup\Install.cmd"> 
    <Environment> 
     <Variable name="EMULATED"> 
     <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> 
     </Variable> 
    </Environment> 
    </Task> 
</Startup> 

「模擬」的變量被設置在模擬器運行 - 注意,在啓動/ INSTALL.CMD文件之上,我跳過做權限如果在模擬器中運行則更改。