나는 오래된 스레드를 알고 있지만 대답은 누군가에게 유용 할 수 있습니다.
하늘색 작업자 프로세스가 사용자 정의 사용자 (taskmgr에서 GUID로 표시됨)에서 실행되는 것으로 보입니다. 이 사용자 계정은 상당히 제한적이며 파일 시스템에 대한 읽기 액세스 권한이 없습니다 (approot 디렉토리 내에서도).
내 솔루션은 icacls를 사용하여 파일에 액세스 할 수있는 하늘색 역할 (msdn article 참조)에 대한 시작 스크립트를 만드는 것이 었습니다. 이 경우, 나는 들어, 내 프로젝트에 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 파일에서 I에 의해 배포 중에이 시작 스크립트를 실행하는 푸른 배포 시스템에 지시 (예를 들어 <WorkerRole>) 역할 정의 내에서이 퍼팅 :
<Startup>
<Task executionContext="elevated" commandLine="startup\Install.cmd">
<Environment>
<Variable name="EMULATED">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
"에뮬레이트"변수가 에뮬레이터가 실행 중일 때 설정 - 시작에 점에 유의/INSTALL.CMD 위의 파일을, 나는 권한을하고 건너 뛰기 에뮬레이터에서 실행중인 경우 변경하십시오.
동일한 문제가 있습니다. File.Open (filename, FileMode.Open)은 액세스 거부 예외를 발생시킵니다. 파일은 확실히 존재합니다 (File.Exists (filename)은 true를 반환합니다). 이 문제를 해결할 수 있었습니까? –