題 如何查找正在運行的程序的命令行參數?


我正在尋找一種工具或方法來找出已經傳遞給程序的命令行參數,例如當它由另一個程序運行時(啟動器 - 應用程序場景)。


73
2018-04-22 14:36


起源




答案:


你可以使用 Process Explorer

只需將鼠標懸停在進程上即可查看用於啟動它的命令行參數:
enter image description here

或者,你可以打開 性能 進程並檢查命令行在那裡:
enter image description here


63
2018-04-22 14:39



太棒了。 - cutrightjm
不幸的是,它似乎不適用於受WinLicense / Themida保護的應用程序: oreans.com/winlicense.php 還有其他想法嗎? - Gepard
@Gepard:你怎麼知道它不起作用?你確定應用程序實際上是用命令行參數調用的嗎?無論哪種方式,PE使用 Windows方式 確定該信息。我認為,任何其他東西都必鬚根據具體應用進行定制。 - Der Hochstapler
我的壞,它沒有運行PE升高。它按預期工作。 - Gepard
@OliverSalzburg,這個程序是如何工作的?任何正常的C程序都可以實現嗎? - Pacerier


您也可以使用Windows的WMI服務在沒有Process Explorer的情況下執行此操作。從命令提示符運行以下命令:

WMIC path win32_process get Caption,Processid,Commandline

如果要將輸出轉儲到文件(使其更容易閱讀),請使用/ OUTPUT開關:

WMIC /OUTPUT:C:\Process.txt path win32_process get Caption,Processid,Commandline

77
2017-12-15 17:29



很好,你怎麼知道的? - Pacerier
@Pacerier:我不確定是否誠實;-)我認為它來自於挖掘WMI文檔和玩遊戲,因為我當時需要使用WMI。 - Andy E
您指的是哪些WMI文檔? - Pacerier
這是一個非常有用的命令行方法,用於獲取正在運行的進程的命令行。在我的情況下,我能夠稍微調整一下以獲得僅針對特定進程的輸出:WMIC路徑win32_process其中“caption ='cmd.exe'”獲取命令行 - chriv
很好,where子句實際上支持一些SQL功能,例如,“name like'cmd。%' - zhaorufei


人們也可以通過使用來實現 任務管理器

打開任務管理器(通過CTRL-SHIFT-ESC,CTRL-ALT-DELETE或任何其他方法)。

對於Windows 7(可能還有Windows XP):

  • 轉到“進程”選項卡。在“視圖”菜單上,選擇“選擇列...”。
  • 選中“命令行”複選框,然後單擊“確定”。 (你可能需要向下滾動才能找到它)

對於Windows 8:

  • 轉到“詳細信息”選項卡。右鍵單擊任何列(例如,名稱,PID等)並選擇“選擇列”。
  • 選中“命令行”複選框,然後單擊“確定”。 (你可能需要向下滾動才能找到它)

命令行列將添加到當前顯示的列中。


29
2017-10-03 07:28



我真的沒有得到你@JesseBarnum,無論命令行多長,都可以隨時調整列的大小以獲得完整的視圖,對吧? - Jeromy Adofo
僅當窗口寬度足以滿足命令的大小時。如果該命令類似於具有長類路徑的Java進程,則該命令將不適合窗口寬度。 - Jesse Barnum
好的,謝謝,指出。我沒有遇到過這個問題,而且我的任務管理器可以滾動 - 不知道你的問題:-)。我想如果你能給我一個樣本程序試試,那可以解決它。 - Jeromy Adofo
這是一個被低估的答案,不知道這是可能的。 - Hashim
我在上面看到了一些關於Windows任務管理器的評論。即使您將“命令行”列設置為顯示具有非常長的命令行的Java進程也會被截斷。但是,您可以單擊任務管理器中的行並“複製”(Ctrl-c)整行並將其粘貼到文本編輯器中以查看整個命令行,無論多長時間。 - JohnD


powershell救援。

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 }

找到並殺死獎金。您可以直接從powershell運行它,或者如果您已經安裝了系統,則可以從ps1運行它。我詳細介紹了無限制的腳本設置 我用powershell殺死殭屍 以及其他的PowerShell技巧......


4
2017-08-07 05:46



哇...鑑於問題的標題,殺戮部分是相當危險的;)其他一個非常簡潔的答案;) - Tom


如果進程已經運行並且不會很快終止,以前的答案很好。但是如果你需要(正如我所做的那樣)這樣做或許過程啟動多次和/或快速終止,或者可能在更長的時間內記錄出現,有一種方法可以使用 進程監視器

基本上它會記錄系統中的各種事件,在這種情況下,我們只需過濾“Process Start”事件和我們要監視的進程的名稱,如下所示:

enter image description here

然後只需保持進程監視器運行並執行任何操作即可獲得要記錄的進程。您可以在“詳細信息”列或“命令行”列中查看(取決於您如何配置這些)命令行參數。例如:

enter image description here

當然,通過這種方式,您可以提取更多相關信息,例如工作目錄是什麼,在流程上傳遞了哪些環境變量等等。此外,將結果導出到文件中也很容易。


3
2018-01-27 10:39





使用時 CygWin的如果我開始了 蟒蛇 進程,這是命令行的一個例子:

c:\CygWin\bin\python2.7.exe /usr/local/bin/sudoserver.py

Process Explorer 只看到主要的exe:

Process Explorer not detecting full command line of Python process

(注意 “路徑:[錯誤打開過程消息]” (見EDIT-1))。 相同的結果 tasklist

C:\>tasklist | find "python" /i
python2.7.exe                 5740 Console                    1    15.312 KB

所以,我直到現在才知道的唯一技巧是通過它找到它 CygWin Bash shell  pgrep

Luis@Kenobi /cygdrive/c/
$ pgrep -f -l server.py
5740 /usr/bin/python2.7 /usr/local/bin/sudoserver.py

知道這一點很有用,只要CygWin在Windows中沒有任何問題,你可以用它來運行許多POSIX和Python程序。

編輯:在Windows中,您似乎不需要任務列表的管理員權限。在CygWin中,您需要它們才能查看管理員的進程(對我來說似乎更符合邏輯:完整的命令行可能有 一些參數,如密碼 在裡面),所以我們必須運行 CygWin的 打擊 提高的  管理員模式

編輯1:如果您以管理員身份運行Process Explorer,則不會發生此問題。謝謝你的指點,@帕西爾。


1
2018-04-07 15:07



如果您以管理員身份運行,則不會看到 [Error opening process message] - Pacerier
你是對的,@ Pacerier。要記得太明顯了:-)。謝謝。我編輯了我的帖子以反映它。 - Sopalajo de Arrierez


run 或者轉到 start 和搜索:

tasklist -m

tasklist -svc

-3
2017-11-02 04:46



這不會顯示調用命令行。 /m 顯示加載的模塊(DLL等)和 /svc 顯示每個流程中託管的服務。 - Bob