Process.StartTime访问被拒绝(.Net Core)

问题描述 投票:2回答:1

调用以下代码时,.NET问题Access被拒绝。我想使用System.Diagnostics库来获取有关进程的信息。

Process[] processes = Process.GetProcessesByName("MyProcess");

if (processes.Any())
{
   var process = processes[0];

   // Access is denied
   var startTime = process.StartTime;
}

上面的代码是在IIS 10上运行的ASP.NET MVC Core 2.2服务的HttpGet方法的一部分(到目前为止都在本地)。我正在使用System.Diagnostic.Process 4.3.0。

将IIS Apppool添加到本地管理员组没有帮助。鉴于此属性的文档声明Process类包含链接请求,并且“当直接调用者或派生类没有完全信任权限时抛出SecurityException”,这是有道理的。问题是我不明白如何在.net核心Web应用程序中提供完全信任,我还没有找到任何关于链接需求的好例子。是在web.config中 - 如果不是更早的话,我认为哪个部分与.net核心一起消失了?

我感兴趣的过程是同一解决方案中的窗口控制台应用程序,但由Windows调度程序启动。

我希望得到Process.StartTime,但是拒绝访问Access。但是,我在安全配置中遗漏了一些东西。

因此,假设IIS AppPool是HttpGet的执行者,而另一个进程 - 一个Windows控制台应用程序 - 独立运行,我如何配置安全性以成功调用Process.StartTime?

PS - 我在方法上尝试了[SecurityCritical]注释 - 没有成功。

c# .net-core
1个回答
0
投票

在IIS中,您可以设置站点用作指定用户的应用程序池。

在任务计划程序中,您还可以将控制台应用程序设置为以指定用户身份运行。

我建议将它们作为同一个用户运行。

我将在您的控制台应用程序所在的文件夹中为您的应用程序池用户授予完全权限。

您需要将应用程序池用户添加到“性能日志用户”组和/或“性能计数器用户”组(取决于他们是否只需要读取权限)。我本来希望让这个用户成为管理员可以解决你的问题,但似乎并非如此。 (我建议通过this very similar question阅读)

PS - 默认情况下您不再拥有web.config,但它仍然可以添加到项目中并具有许多用途(例如,在使用Visual Studio中的单击发布时配置IIS站点设置)。

© www.soinside.com 2019 - 2024. All rights reserved.