gpt4 book ai didi

.net - Process.ExitTime "Process was not started by this object, so requested information cannot be determined."上的 InvalidOperationException 是什么意思

转载 作者:行者123 更新时间:2023-12-04 00:05:33 29 4
gpt4 key购买 nike

我们有一个工具可以管理计算机的多个进程,在不确定的情况下,我们会不时收到 InvalidOperationException访问MSDN时:Process.ExitTime属性(property)。

异常消息说

process was not started by this object, so requested information cannot be determined



这是否意味着我只能获得我自己启动的进程的退出时间?这在任何地方都没有记录。

最佳答案

为了访问退出时间信息,Process类需要有一个用于进程的开放句柄。虽然例如WaitForExit将临时创建一个句柄,不幸的是它在返回之前关闭了该句柄。

我们可以强制Process类通过访问其 Handle 来永久打开进程的句柄或 SafeHandle属性 1.但是,我们应该注意到,由于在构建 Process 之间,这里仍然存在一些差异。对象并访问 SafeHandle属性进程可以退出。

启动一个记事本实例,找到它的进程号,编辑到Main的第一行这里:

using System;
using System.Diagnostics;

namespace PlayAreaCSCon
{
internal class Program
{
public static void Main(string[] args)
{
var p = Process.GetProcessById(18148);
//var sh = p.SafeHandle;
p.WaitForExit();

Console.WriteLine(p.ExitTime);
Console.ReadLine();
}
}
}

该程序运行后,退出记事本并观察我们是否收到您提到的异常。清理并启动另一个记事本副本。这一次,在编辑进程 ID 后,也取消注释提到 SafeHandle 的行。 .

一旦这个程序再次运行,退出记事本。观察,这次我们得到了退出时间。所以你可以看到这个异常(exception)是如何产生的,我认为我们都同意该消息非常不完整。

a并且它不能为已经退出的进程魔术一个存在。

1可能有很多额外的入口点会间接导致访问这些属性,从而对 Handle 产生副作用 - 但这些是强制打开句柄的最明显的途径。

关于.net - Process.ExitTime "Process was not started by this object, so requested information cannot be determined."上的 InvalidOperationException 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649119/

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