gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:43:01 25 4
gpt4 key购买 nike

调用以下代码时,.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 Apppool 添加到本地管理员组没有帮助。鉴于此属性的文档指出 Process 类包含链接需求,并且“当直接调用者或派生类没有完全信任权限时抛出 SecurityException”,这在一定程度上是有道理的。问题是我不明白如何在 .net 核心 Web 应用程序中提供完全信任,而且我还没有找到任何关于链接需求的好例子。它在 web.config 中吗?我认为如果不是更早的话,哪一部分会随 .net 核心一起消失?

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

我希望得到 Process.StartTime,但得到的却是访问被拒绝。但是,我的安全配置中缺少一些内容。

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

PS - 我已尝试对该方法使用 [SecurityCritical] 注释 - 没有成功。

最佳答案

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

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

我建议以同一用户身份运行它们。

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

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

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

关于c# - Process.StartTime 访问被拒绝(.Net Core),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com