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



调用以下代码时,.NET 问题访问被拒绝。我想使用 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 应用程序池添加到本地管理员组没有帮助。考虑到此属性的文档,这是有道理的,该文档指出 Process 类包含链接需求,并且"当直接调用方或派生类没有完全信任权限时,将引发 SecurityException"。问题是我不明白如何在 .net 核心 Web 应用程序中提供完全信任,并且我没有找到任何关于链接需求的好例子。它是在 web.config 中吗 - 如果不是更早的话,我认为哪一部分被 .net core 带走了?

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

我希望获得Process.StartTime,但获取访问权限被拒绝。但是,我的安全配置中缺少一些东西。

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

PS - 我已经尝试了该方法的 [安全关键] 注释 - 没有成功。

在 IIS 中,您可以设置站点用于以指定用户身份运行的应用程序池。

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

我建议以同一用户身份运行这些。

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

您需要将应用程序池用户添加到"性能日志用户"组和/或"性能计数器用户"组(取决于他们是否只需要读取权限)。我本来希望让这个用户成为管理员会解决您的问题,但事实似乎并非如此。 (我建议也通读这个非常相似的问题)

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

最新更新