c# - 是否可以使用更多条件过滤 IIS 工作进程?
问题描述
我有一小段代码,如下所示,用于列出所有 IIS 工作进程。(w3wp.exe)
w3wp.exe
但是当存在多个进程时,我需要更多的过滤标准。有应用程序池名称或站点名称的过滤器选项吗?
var processes = ((DTE2)Marshal.GetActiveObject("VisualStudio.DTE.15.0"))
.Debugger
.LocalProcesses
.Cast<EnvDTE.Process>()
.Where(proc => proc.Name.Contains("w3wp.exe"));
if (!processes.Any())
{
Debug.WriteLine("no w3wp");
}
else if (processes.Count() > 1)
{
Debug.WriteLine("multiple w3wp");
var p = processes.Where(x => ???).Single();
}
else
{
Debug.WriteLine("single w3wp");
}
系统信息
- IIS 10
- 视觉工作室 2017
- .Net 框架 4.6.1
解决方案
我为将来需要它的人分享了我的解决方案。
找到您要查找的 ProcessId。
using System.Management;
public int GetProcessId()
{
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Process where Name = 'w3wp.exe'"))
{
foreach (ManagementObject process in searcher.Get())
{
if (process["CommandLine"].ToString().Contains("**YOUR-SEARCH-CRITERIA**"))
return Convert.ToInt32(process["ProcessId"].ToString());
}
}
throw new Exception("Not found.");
}
比附加 ProcessId。
var process = ((DTE2)Marshal.GetActiveObject("VisualStudio.DTE.15.0"))
.Debugger
.LocalProcesses
.Cast<EnvDTE.Process>()
.Where(proc => proc.ProcessID == GetProcessId())
.FirstOrDefault();
if(process != null)
process.Attach();
推荐阅读
- python - 如何按列内容过滤数据?
- c - PARSEC x264 基准测试中的奇怪行为
- vue.js - Vue.js 的 Toast UI 编辑器中的 v-model
- java - 如何根据启动标志启动@KafkaListener
- docker - Dockerfile 执行权限被拒绝
- javascript - 为什么javascript导入需要这么长时间?
- python - 文件执行错误 - 没有名为“pywinauto”的模块
- python - Python:对于每一行,获取下一个较早的日期,其中 value > 0
- javascript - 访问这种类型的 Json 对象
- java - 我在我的 JavaFX 项目中找不到这个问题的答案:java.lang.RuntimeException: java.lang.reflect.InvocationTargetException