【问题标题】:'Access is Denied' IIS on killing a windows process'访问被拒绝' IIS 杀死 Windows 进程
【发布时间】:2020-09-07 00:00:44
【问题描述】:

我创建了一个 Web API,用于使用 Web API 安装最新版本的 exe,并通过 IIS 服务器托管。

进程正在下载->关闭->通过CLI安装Exe。

下载过程正常。

在关闭正在运行的 exe 异常时捕获“访问被拒绝”。

以下是我用来关闭正在运行的 exe 的代码块。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebGrease;

namespace API.Controllers
{
    public class TestController : ApiController
    {
        public string Get()
        {


            foreach (Process p in Process.GetProcessesByName("APPLICATION NAME"))
            {
                try
                {
                    p.Kill();
                    p.WaitForExit();
                }
                catch (Exception ex)
                {
                    return ex.Message.ToString();
                }
            }

            return "Aborted";
        }

    }
}

虽然调试相同的代码块工作正常,但在另一台计算机上测试时显示“访问被拒绝”。我猜这个问题与 Windows 身份验证有关。

【问题讨论】:

  • 这是在什么帐户下运行的?该帐户是否具有管理权限?
  • @JazzmanJim 请指导如何检查。对不起,我是新手。
  • 杀死进程需要在线程上调用Kill 方法,该线程的身份是本地管理员或该运行进程的同一帐户。这是每个 Windows 开发人员都应该学习的基本 Windows API 要求。如果您过去从未读过此类内容,那么是时候找一本 Windows 编程书籍了。顺便说一句,在 VS 中调试很容易欺骗你,因为存在大量差异,blog.lextudio.com/…

标签: c# asp.net-mvc iis asp.net-web-api windows-authentication


【解决方案1】:

调试上述代码将把当前记录的窗口帐户作为运行 WebAPI 的凭据。但是,当项目托管在 IIS 中时,将使用其他一些内置的系统帐户。这通常由 IIS 应用程序池标识确定。
虽然授予 IIS 管理权限对网站安全来说是有风险的,但至少这可以解决您的问题。
如果问题仍然存在,请随时告诉我。

【讨论】:

  • 感谢您的努力,Abraham。由于我想将其部署到多台计算机上,因此为每台计算机设置用户名和密码实际上是不可行的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多