【问题标题】:Run msdeploy.exe from under DefaultAppPool produces weird behaviour从 DefaultAppPool 下运行 msdeploy.exe 会产生奇怪的行为
【发布时间】:2015-04-18 09:21:57
【问题描述】:

简介

我有这个 ASP.NET 网络应用程序,我想为其用户提供一种通过 POST 请求更新应用程序的方法,其中包含更新的 zip 文件应用程序的版本。

在成功接收、存储和使用 zip 文件时,我发现 msdeploy.exe 程序不起作用,这意味着我的应用程序没有更新。

我正在使用以下命令行语法:

msdeploy -verb:sync -source:package={0} -dest:auto -enableRule:DoNotDeleteRule

(其中 {0} 被引用的 zip 文件的完整路径替换)

问题

虽然通过 Windows© Shell 手动成功安装更新,但当我使用我的 Web 应用程序启动 msdeploy 时,我未能这样做。我正在使用的代码:

ProcessStartInfo info = new ProcessStartInfo()
{
    FileName = Path.Combine(workingDir, "msdeploy.exe"),
    WorkingDirectory = workingDir,
    CreateNoWindow = true,
    Arguments = @"-verb:sync -source:package={0} -dest:auto -enableRule:DoNotDeleteRule -verbose".Formatted(filename.Enquote()),
    UseShellExecute = false,
    RedirectStandardOutput = true,
};

Process deploy = Process.Start(info);
deploy.Start();

调试尝试

我已将程序的输出重定向到一个文件中,因此我可以将其与 理想 进行比较,即实际工作的手动方式。

Working msdeploy 输出(通过我的 windows 帐户 + windows shell 运行):

Info: Updating file (Default Web Site/ElQueue\bin\AutoMapper.dll).
Info: Updating file (Default Web Site/ElQueue\bin\Contracts.dll).
...
Info: Updating file (Default Web Site/ElQueue\Views\Web.config).
Info: Updating file (Default Web Site/ElQueue\Web.config).
Info: Adding ACL's for path (Default Web Site/ElQueue)
Info: Adding ACL's for path (Default Web Site/ElQueue)
Total changes: 27 (1 added, 0 deleted, 26 updated, 0 parameters changed, 803122 bytes copied)

不工作的msdeploy 输出(通过Process.Start 因此IIS AppPool\DefaultAppPool IIS 的虚拟帐户运行):

Warning: BACKUP_FAILED - Skipping backup because it failed due to an unknown reason.яFor more information, contact your server administrator.
Info: Adding sitemanifest (sitemanifest).
Info: Creating application (Default Web Site/ElQueue)

而且,仅此而已。不多。没有文件更新,什么都没有。应用程序的文件保持不变。

那么,如何以正确的方式更新我的网络应用?

我认为 msdeploy 是一种方式,但它似乎不适用于默认的 IIS 应用程序池。

【问题讨论】:

  • 这可能是基于权限的吗?您说它可以使用您的 Windows 帐户而不是通过应用程序工作,所以感觉该应用程序可能没有执行权限?您可以尝试调用Process.Start 并传递您的凭据来测试(使用msdn.microsoft.com/en-us/library/sxf2saat(v=vs.110).aspx)您在服务器事件日志中得到什么了吗?
  • 尝试将 MachineName\IUSR 添加到本地管理员组(如果您不想这样做,请尝试在目标站点上安装 Web 管理服务并设置 iis 管理员权限);还要确保您在不同的应用程序池下运行您的上传站点。
  • @badazzhindu 我这样做了,结果保持不变。
  • @philreed 使用Process.Start 和我的凭据,输出流中没有日志,它只是,而结果是相同的。这就像 msdeploy 启动并立即关闭而不说什么。根据更新尝试,服务器事件 log 不包含任何信息。

标签: asp.net iis web-deployment msdeploy application-pool


【解决方案1】:

您如何验证您的用户?如果是 Windows 身份验证,最好的选择是配置Web deployment delegation rule。让您的矿池帐户身份成为本地管理员的一部分可能会带来严重的安全问题。

【讨论】:

  • 在这种情况下,我将为站点创建一个单独的池,然后在管理服务委派中为池标识配置一个规则。因此,在对用户进行身份验证后,您可以通过 Web Deploy API 部署上传的包(调用将使用池帐户的安全上下文)。这种方法更复杂,但也更安全。
  • 是的,您可能是对的,但似乎我无法安装管理服务,尽管我阅读了如何安装管理服务的文章(可能是因为我正在运行嵌入式 Windows 7)。另外,能否提供一个部署 API 的链接?
【解决方案2】:

通过 lusrmgr.msc 管理控制台工具将 IIS AppPool\DefaultAppPool 用户添加到 Administrators 组并在此之后重新启动,从而解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2015-06-04
    • 2016-10-18
    相关资源
    最近更新 更多