5

我有一个在 Azure 上运行的云服务,我正在尝试将 Umbraco 作为 VirtualApplication 添加到 WebRole:

服务定义.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>

启动.bat:

echo "starting startup task" >> log.txt
%windir%\system32\Icacls.exe ..\* /T /grant "Network Service":(F) > log.txt

并且还按照此处的说明添加对 Web 角色的 OnStart 事件的权限并且还按照此处URL。它也没有工作。

当我直接远程桌面进入实例时,文件夹 E:\sitesroot\ 甚至不存在。

4

1 回答 1

1

对于那些想知道的人。我发现了问题。startup.bat 脚本未成功运行。我能够通过将其更改为以下内容来找出答案:

启动.bat

%windir%\system32\Icacls.exe ..\..\* /T /grant "Network Service":(F) > c:\\logStart.txt 2>&1
exit /b 0

问题与文件的编码有关。该文件仅在使用记事本++并将编码更改为“UTF-8 without BOM”后才能成功运行

于 2014-01-29T03:21:18.000 回答