如何在Azure启动任务中获取siteroot路径而不是Approt?

如何在Azure启动任务中获取siteroot路径而不是Approt?,azure,command-line,Azure,Command Line,我有一个Azure web项目,该项目已在ServiceDefinition.csdef中配置启动任务 <Startup> <Task commandLine="Task.cmd" executionContext="elevated" taskType="simple" /> </Startup> 但启动任务中的目录和实际生产路径不同。(E:\Approt与E:\siteroot\0) 有没有办法在my Task.cmd中获取生产路径 谢谢您将使用一点

我有一个Azure web项目,该项目已在ServiceDefinition.csdef中配置启动任务

<Startup>
  <Task commandLine="Task.cmd" executionContext="elevated" taskType="simple" />
</Startup>
但启动任务中的目录和实际生产路径不同。(E:\Approt与E:\siteroot\0)

有没有办法在my Task.cmd中获取生产路径


谢谢

您将使用一点PowerShell!您必须创建一个PowerShell脚本并修改cmd。 您的整个PowerShell文件(startup.ps1)应如下所示:

Import-Module WebAdministration
$site = Get-ChildItem IIS:\Sites | Where-Object {$_.State -eq 'Started'}
$siteRoot = $site.PhysicalPAth
$fileExe = "InstallService.exe"
& $fileExe  /webpath=$siteRoot
请注意,这没有经过测试,因此不能保证工作正常。 您的新startup.cmd将如下所示:

InstallService.exe /webpath="%cd%"
@echo off 
powershell -command "Set-ExecutionPolicy Unrestricted" 2>> err.out  
powershell .\startup.ps1 2>> err.out

请慢慢看。

以下内容将当前路径放入变量%SCRIPTPATH%:
设置SCRIPTPATH=%~p0
它可以工作,但启动任务通常在创建IIS网站之前执行,因此我们没有启动的角色YetCreat。嗯,你说得对。因为这个问题,我记得使用AppPool默认值而不是直接使用AppPool。一个可能的解决方案是将启动任务设置为后台类型(默认),并放置一些计时器。这不是一个稳健的解决方案。最终有效的解决方案是什么?我想把它包括在我的回答中