如何在Windows 8.1通用应用程序中检测程序(进程)是否正在运行并获取其实例

4
我是Windows通用应用程序的新手,但我发现这是一个非常有趣的领域,所以我想开始了解它的功能。我目前是一个WPF .NET开发人员,我希望能够检查程序是否正在运行并获取其实例。在WPF中,我会使用Process.GetProcessesByName()来实现,但是在通用应用程序中,Process不可用。在Windows 8.1通用应用程序中,有没有类似的方法可以获取进程(正在运行程序的实例)?

每个正在运行的进程都会加载svchost.exe,甚至可以在任务管理器中看到它。 - DeshDeep Singh
我正在寻找在代码后台进行操作,你能给我一个使用svchost.exe的示例代码片段吗?谢谢。 - Vladimir Amiorkov
2个回答

5

在UWP应用程序中,System.Diagnostics.Process不可用。这些应用程序被沙箱化并且不允许查看运行在计算机上的其他进程。


1
将此行添加到您的使用列表中:

using System.Diagnostics;

现在,您可以使用Process.GetProcesses()方法获取进程列表,如下例所示:
Process[] processlist = Process.GetProcesses();

foreach(Process theprocess in processlist){
Console.WriteLine(“Process: {0} ID: {1}”, theprocess.ProcessName, theprocess.Id);
}

Process对象的一些有趣属性,这些属性也可能是必需的:

p.StartTime (Shows the time the process started)
p.TotalProcessorTime (Shows the amount of CPU time the process has taken)
p.Threads ( gives access to the collection of threads in the process)

当我尝试使用Process[] processlist = Process.GetProcesses();时,它告诉我:"找不到类型或命名空间“Process”(您是否缺少使用指令或程序集引用)"。我尝试在Windows 8.1通用解决方案中使用此代码(在Windows 8.1项目而不是电话项目中)。我知道我可以在WPF应用程序中使用该代码,但我想开始开发通用应用程序。是否有办法在通用解决方案中使用WPF代码(可能通过可移植代码库)? - Vladimir Amiorkov
是的,你应该先使用命名空间 "using System.Diagnostics"。 - DeshDeep Singh
1
再次问候。我对此感到非常困惑:)。我仍然无法在Windows通用应用程序(Windows 8.1项目)中使用Process类。无论我是否添加System.Diagnostics命名空间,它都不包含Process类。这是我所看到的屏幕截图。我觉得我在尝试在通用应用程序中做一些错误的事情 :) - Vladimir Amiorkov
这个答案没有帮助,而且会误导人。正如Franklin M Gauer III在他的回答中指出的那样,在UWP应用程序中不存在Process类。 - MrPaulch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接