从DefaultAppPool下运行msdeploy.exe会产生奇怪的行为

时间:2015-04-18 09:21:58

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

简介

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

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

我使用以下命令行语法:

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

(其中{0}被取消引用的zip文件的完整路径取代)

问题

当我通过Windows©Shell手动成功安装更新时,当我从我的网络应用程序启动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();

调试尝试次数

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

工作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应用程序池。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

相关问题