是否可以使用更多条件过滤 IIS 工作进程?
Is it possible that filter IIS worker processes with more criteria?
我有一小段代码,如下所示,用于列出所有 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
- Visual Studio 2017
- .Net Framework 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();
我有一小段代码,如下所示,用于列出所有 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
- Visual Studio 2017
- .Net Framework 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();