Mas*_*r_T 5 c# wmi command-line win32-process
我使用此 C# 代码来获取正在运行的进程的命令行参数:
public static void GetProcessesCommandLine(string processName)
{
string query = $@"SELECT CommandLine,ProcessId FROM Win32_Process WHERE Name = '{processName}'";
using (var searcher = new ManagementObjectSearcher(query))
using (var collection = searcher.Get())
{
foreach (ManagementObject item in collection)
{
Console.WriteLine($"--- TESTING PROCESS {item["ProcessId"]} ---");
var commandLine = item["CommandLine"];
if(commandLine == null)
{
Console.WriteLine("WARNING: command line is NULL");
}
else
{
Console.WriteLine($"CommandLine is: {commandLine}");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在某些情况下,命令行属性结果为 NULL,我很难理解这种情况何时以及为何发生。
最初我认为这与运行代码的用户有关,并且对于不属于该用户的进程,命令行为 NULL。然而,经过进一步测试,情况似乎并非如此。例如,我这里有以下情况:
如您所见,我有 4 个实例,explorer.exe全部由 user 启动edsep,并且如果我以 user 身份运行上面的代码,edsep我会正确获取所有命令行。但是,如果我以其他用户身份运行代码,这就是我得到的输出:
正如您所看到的,命令行不仅仅NULL位于四个进程之一上。这里发生了什么?为什么这个过程特别有效而其他过程却不起作用?这里有什么规则?
编辑:另一个测试,因为对使用 explorer.exe 进行测试存在一些疑问。这里我有几个在 user 下运行的 Chrome 实例edsep:
如果我以不同的用户身份运行上面的代码,我会得到以下结果:
正如您所看到的,我只获得了 15 个进程中的 3 个(显然是随机的?)进程的命令行...为什么?
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |