1

标题需要一些扩展。总之,我发现不可能:

  • 将网站部署到 IIS 8 主机
  • 使用 Web 部署包
  • 在 VS 2013 中使用开箱即用的发布功能
  • 使用非管理员 IIS 管理器用户,该用户被委派了部署到给定站点的权限

这一切似乎都归结为一个把事情搞砸的小细节,但我应该描述我的过程,直到一切都分崩离析。

我在 VS 2013 中创建了一个发布配置文件Publish,配置为发布到 Web 包。然后我在开发人员命令提示符下触发以下命令:

msbuild Solution.sln /t:Build /p:DeployOnBuild=true;PublishProfile=Publish;IsDesktopBuild=false

这经历了一个构建过程,我现在在文件夹中看到了预期的包和部署文件_PublishedWebsites\Web_Package。我的下一步是从 Web_Package 文件夹运行它:

Web.deploy.cmd /Y /M:https://example.blah:8172/MsDeploy.axd /U:user /P:p@44w0rd /A:Basic

这就是问题所在。这会导致以下扩展命令(为便于阅读而格式化):

msdeploy.exe
    -source:package='.\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:".\Web.SetParameters.xml"

其执行导致:

Error Code: ERROR_USER_UNAUTHORIZED
More Information: Connected to the remote computer ("example.blah") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site.  Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.

我可以通过手动重新运行扩展命令并将site参数标记到 MsDeploy.axd URL 来解决此问题,如下所示:

msdeploy.exe
    -source:package='.\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd?site=example.blah",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:".\Web.SetParameters.xml"

但是,我看不到任何方法可以通过 MSBuild 自动生成的 Web.deploy.cmd 进行设置。如果我试试这个:

Web.deploy.cmd /Y /M:https://example.blah:8172/MsDeploy.axd?site=example.blah /U:user /P:p@44w0rd /A:Basic

结果是这样的(再次格式化以方便阅读):

msdeploy.exe
    -source:package='D:\DEV\Solution\Web\bin\_PublishedWebsites\Web_Package\Web.zip'
    -dest:auto,computerName="https://example.blah:8172/MsDeploy.axd?site",userName="user",password="p@44w0rd",authtype="Basic",includeAcls="False"
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"D:\DEV\Solution\Web\bin\_PublishedWebsites\Web_Package\Web.SetParameters.xml"  example.blah
Error: Unrecognized argument 'example.blah'. All arguments must begin with "-".
Error count: 1.

我可以使用管理员帐户很好地执行此过程。但似乎非管理员需要这个 site= querystring 值,而自动生成的 Web.deploy.cmd 只是没有这些。

我在这里遗漏了一些明显的东西吗?我在 IIS 管理方面缺少权限吗?我已确保按照此博客文章中的指示设置了管理服务委派规则。

4

2 回答 2

0

使用我制定的流程,我看不到解决此问题的方法。我的解决方案是简单地采用扩展的 MSDeploy.exe 命令行并直接使用它而不是生成的*.deploy.cmd文件。

当然,如果有人提出了我最初问题的实际解决方案,我会很乐意将其标记答案。在那之前,这是我的解决方案。

于 2015-01-26T00:00:30.020 回答
0

您可以将 /M: 参数放在引号中,如下所示:

Web.deploy.cmd /Y "/M:https://example.blah:8172/MsDeploy.axd?site=example.blah" /U:user /P:p@44w0rd /A:Basic
于 2015-05-14T22:52:39.207 回答