Azure で実行されているクラウド サービスがあり、Umbraco を VirtualApplication として WebRole に追加しようとしています。
ServiceDefinition.csdef:
...
<Site name="Web">
<VirtualApplication name="cms" physicalDirectory="../../../umbracocms" />
...
エミュレーターのローカル マシンで完全に動作しますが、パッケージを Azure クラウド サービスにデプロイすると、Umbraco ページにアクセスできず、次のエラーが返されます。
Access to the path 'E:\sitesroot\1\config\applications.config' is denied.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.UnauthorizedAccessException: Access to the path 'E:\sitesroot\1\config\applications.config' is denied.
スタックトレース:
[UnauthorizedAccessException: Access to the path 'E:\sitesroot\1\config\applications.config' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +216
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1430
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +205
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync) +112
System.Xml.XmlWriterSettings.CreateWriter(String outputFileName) +7430688
System.Xml.Linq.XDocument.Save(String fileName, SaveOptions options) +189
Umbraco.Core.Services.SectionService.LoadXml(Action`1 callback, Boolean saveAfterCallback) +253
Umbraco.Core.EnumerableExtensions.ForEach(IEnumerable`1 items, Action`1 action) +148
Umbraco.Core.CoreBootManager.Complete(Action`1 afterComplete) +116
Umbraco.Web.WebBootManager.Complete(Action`1 afterComplete) +337
[HttpException (0x80004005): Access to the path 'E:\sitesroot\1\config\applications.config' is denied.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +12582201
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +175
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475
[HttpException (0x80004005): Access to the path 'E:\sitesroot\1\config\applications.config' is denied.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12599232
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12438981
私はすでにスタートアップタスクを無駄に追加しようとしました:
<Startup priority="1">
<Task commandLine="startup.bat" executionContext="elevated" taskType="simple" />
</Startup>
startup.bat:
echo "starting startup task" >> log.txt
%windir%\system32\Icacls.exe ..\* /T /grant "Network Service":(F) > log.txt
また、こちらのURLで指示されているように、Web ロールの OnStart イベントにアクセス許可を追加します。それもうまくいきませんでした。
インスタンスに直接リモートデスクトップすると、フォルダ E:\sitesroot\ さえ存在しません。