【发布时间】: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