如何找出正在运行的程序的命令行参数?

Gep*_*ard 108 windows windows-7 command-line-arguments

我正在寻找一种工具或方法来找出哪些命令行参数已传递给程序,例如当它由另一个程序运行时(启动器应用程序场景)。

And*_*y E 108

您也可以在没有 Process Explorer 的情况下使用 Windows 的 WMI 服务来完成。从命令提示符运行以下命令:

WMIC path win32_process get Caption,Processid,Commandline
Run Code Online (Sandbox Code Playgroud)

如果要将输出转储到文件(使其更易于阅读),请使用 /OUTPUT 开关:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline
Run Code Online (Sandbox Code Playgroud)

  • 这是一种非常有用的命令行方法,用于获取正在运行的进程的命令行。就我而言,我能够稍微调整一下以获得特定进程的输出:WMIC path win32_process where "caption='cmd.exe'" get Commandline (5认同)
  • @Pacerier:我不确定是否诚实;-) 我认为它来自于挖掘 WMI 文档并四处玩耍,因为当时我需要使用 WMI。 (4认同)
  • 太好了,where 子句实际上支持一些 SQL 特性,例如, where "name like 'cmd.%' (4认同)
  • 下面是 where 子句中类似 SQL 过滤的示例:`WMIC path win32_process where "name like '%cmd%'" get Caption,Processid,Commandline` (4认同)
  • 您指的是哪些 WMI 文档? (3认同)

Der*_*ler 84

您可以使用Process Explorer做到这一点。

只需将鼠标悬停在进程上即可查看用于启动它的命令行参数:
“chrome.exe”进程列表

或者,您可以打开进程的属性并在那里检查命令行:
“chrome.exe”进程的属性

  • 我的错,它没有运行 PE 提升。它按预期工作。 (7认同)
  • 这太酷了。 (2认同)
  • 不幸的是,它似乎不适用于受 WinLicense/Themida 保护的应用程序:http://www.oreans.com/winlicense.php 还有其他想法吗? (2认同)

Jer*_*ofo 56

也可以通过使用任务管理器来实现这一点。

打开任务管理器(通过 CTRL-SHIFT-ESC、CTRL-ALT-DELETE 或任何其他方法)。

对于 Windows 7(可能还有 Windows XP):

  • 转到“进程”选项卡。在“查看”菜单上,选择“选择列...”。
  • 选中“命令行”复选框,然后单击“确定”。(您可能需要向下滚动才能找到它)

对于 Windows 8:

  • 转到“详细信息”选项卡。右键单击任何列(例如名称、PID 等)并选择“选择列”。
  • 选中“命令行”复选框,然后单击“确定”。(您可能需要向下滚动才能找到它)

一列命令行将被添加到当前显示的列中。

  • 这是一个被大大低估的答案,不知道这是可能的。 (9认同)
  • 我在上面看到了一些关于 Windows 任务管理器的评论。即使您将“命令行”列设置为使用非常长的命令行显示 Java 进程也会被截断。但是,无论多长时间,您都可以单击任务管理器中的行并“复制”(Ctrl-c)整行并将其粘贴到文本编辑器中以查看整个命令行。 (7认同)
  • 我最喜欢这个答案。它适用于标准的 Windows 安装(包括 Windows 10)。 (3认同)
  • 我真的不明白@JesseBarnum,无论命令行有多长,您总是可以调整列的大小以获得完整的视图,对吗? (2认同)
  • 惊人的!不知道有这个选项。现在我知道了,当您右键单击“进程”选项卡下的顶行时,还有一个“命令行”选项可供选择。 (2认同)

小智 8

PowerShell 来救援。

找:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'}
Run Code Online (Sandbox Code Playgroud)

并杀死作为奖励:

Get-WmiObject Win32_Process -Filter "name = 'perl.exe'" | where {$_.CommandLine -eq '"C:\strawberry\perl\bin\perl.exe" t/Server_PreFork.t'} | ForEach-Object { Invoke-WmiMethod -Path $_.__Path –Name Terminate }
Run Code Online (Sandbox Code Playgroud)

如果您有系统设置,您可以直接从 powershell 或从 ps1 运行它。我详细介绍了关于我用 powershell 杀死僵尸以及其他 powershell 技巧的不受限制的脚本设置...


Sil*_*Sil 5

如果进程已经在运行并且不会很快终止,以前的答案是很好的。但是,如果您需要(正如我所做的那样)在进程多次启动和/或快速终止时执行此操作,或者在更长的时间内记录发生的事件,则可以使用Process Monitor来实现此目的。

基本上它会记录系统中的各种事件,在这种情况下,我们可以只过滤“Process Start”事件和我们要监视的进程的名称,如下所示:

在此处输入图片说明

然后保持进程监视器运行并执行任何操作以使您想要记录的进程运行。您可以在“详细信息”列或“命令行”列(取决于您如何配置这些)中看到命令行参数。例如:

在此处输入图片说明

当然,通过这种方式,您可以提取更多相关信息,例如工作目录是什么,进程中传递了哪些环境变量等……而且很容易将结果导出到文件中。


归档时间:

查看次数:

177186 次

最近记录:

5 年,6 月 前