実行中のプログラムのコマンドライン引数を調べるにはどうすればよいですか?


84

他のプログラムによって実行されたとき(ランチャーアプリケーションシナリオ)など、プログラムに渡されたコマンドラインパラメーターを見つけるためのツールまたはメソッドを探しています。

回答:


71

Process Explorerを使用してそれを行うことができます。

マウスをプロセスの上に置くと、プロセスの起動に使用されるコマンドライン引数が表示されます。
ここに画像の説明を入力してください

または、プロセスのプロパティを開いて、コマンドラインをすぐに調べることもできます。
ここに画像の説明を入力してください


2
かっこいい。
cutrightjm

2
残念ながら、WinLicense / Themidaで保護されたアプリケーションでは動作しないようです:oreans.com/winlicense.php他のアイデアはありますか?
ゲパール

@Gepard:どうしてうまくいかないのですか?実際、アプリケーションはコマンドライン引数で呼び出されたのですか?どちらの方法でも、PEはWindowsの方法を使用してその情報を判断します。他のものは特定のアプリケーションに合わせてカスタマイズする必要があると思います。
デアホッホシュプラー

6
私の悪い点は、PEを上げて実行しなかったことです。意図したとおりに機能しています。
ゲパール

@OliverSalzburg、このプログラムはどのように機能しましたか?通常のCプログラムでこれを達成できますか?
Pacerier

88

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

4
ニース、どうやってこれを知ったの?
Pacerier

4
@Pacerier:正直かどうかはわかりません;-)それは、WMIドキュメントを掘り下げて遊んだことから来たと思います。
アンディE

3
どのWMIドキュメントを参照していますか?
Pacerier

3
これは、実行中のプロセスのコマンドラインを取得するのに非常に役立つコマンドラインメソッドでした。私の場合、特定のプロセスだけの出力を得るためにこれを少し調整することができました。WMICパスwin32_process where "caption = 'cmd.exe'" get Commandline
chriv

1
すばらしい、where句は実際にいくつかのSQL機能をサポートしています。たとえば、where "'cmd。%'のような名前
zhaorufei

39

また、タスクマネージャを使用してこれを実現することもできます。

タスクマネージャーを開きます(CTRL-SHIFT-ESC、CTRL-ALT-DELETEまたはその他の方法)。

Windows 7(およびおそらくWindows XP)の場合:

  • [プロセス]タブに移動します。[表示]メニューの[列の選択...]を選択します。
  • 「コマンドライン」のチェックボックスをオンにして、「OK」をクリックします。(それを見つけるには下にスクロールする必要があるかもしれません)

Windows 8の場合:

  • [詳細]タブに移動します。任意の列(名前、PIDなど)を右クリックして、[列の選択]を選択します。
  • 「コマンドライン」のチェックボックスをオンにして、「OK」をクリックします。(それを見つけるには下にスクロールする必要があるかもしれません)

コマンドラインの列が、現在表示されている列に追加されます。


1
@JesseBarnumを実際に取得するわけではありません。コマンドラインの長さに関係なく、いつでも列のサイズを変更して完全なビューを表示できます。
ジェロミーアドフォ

1
ウィンドウがコマンドのサイズに対して十分な幅がある場合のみ。コマンドが長いクラスパスを持つJavaプロセスのようなものである場合、ウィンドウの幅に収まりません。
ジェシーバーナム

1
よろしくお願いします。私はその問題を抱えていませんでしたし、私のタスクマネージャーはスクロール可能です-あなたのことは知らないでください:-)。試してみるためのサンプルプログラムを送っていただければ、解決できると思います。
ジェロミーアドフォ

6
これは非常に過小評価されている回答であり、これが可能だとは考えていませんでした。
ハシム

4
上記のWindowsタスクマネージャーに関するいくつかのコメントを参照してください。「コマンドライン」列を設定して、非常に長いコマンドラインを持つJavaプロセスを表示しても、切り捨てられます。ただし、タスクマネージャーで行をクリックし、行全体を「コピー」(Ctrl-c)して、テキストエディターに貼り付けて、コマンドライン全体を表示できます。
-JohnD

6

PowerShellが助けになります。

見つける:

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

ボーナスとして殺す:

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トリックを詳述しています...


1
おっと...質問のタイトルを考えると、殺す部分は非常に危険です;)非常にきちんとした答えを他の人に見せる;)
トム

5

以前の回答は、プロセスが既に実行されていて、すぐに終了しない場合に役立ちます。ただし、プロセスを複数回起動したり、すぐに終了したり、より長い期間で発生をログに記録したりする必要がある場合は、Process Monitorを使用する方法があります。

基本的に、システム内のさまざまなイベントを記録します。この場合、以下に示すように、「プロセス開始」イベントと監視するプロセスの名前をフィルタリングするだけです。

ここに画像の説明を入力してください

次に、プロセスモニタを実行したままにして、実行したいプロセスを取得するために何でもします。[詳細]列または[コマンドライン]列(これらの設定方法によって異なります)でコマンドライン引数を確認できます。例えば:

ここに画像の説明を入力してください

もちろん、この方法で、作業ディレクトリとは何か、プロセスに渡された環境変数など、はるかに関連する情報を抽出できます。また、結果をファイルにエクスポートするのも簡単です。


1

CygWinを使用しているときにPythonプロセスを開始すると、これはコマンドラインの例です。

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

ただし、Process Explorerにはメインexeのみが表示されます。

プロセスエクスプローラーがPythonプロセスの完全なコマンドラインを検出しない

「パス:[プロセスオープンメッセージのエラー]」に注意してください(EDIT-1を参照)。同じ結果tasklist

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

だから、私が今まで知っている唯一のトリックは、CygWin Bashシェルを 介してそれを見つけること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のでバッシュを高架 管理者モード

EDIT-1:管理者としてProcess Explorerを実行する場合、この問題は発生しません。指摘してくれてありがとう、@ Pacerier。


2
あなたは見られない管理者として実行する場合[Error opening process message]
Pacerier

あなたは正しかった、@ Pacerier。覚えているのはあまりにも明白です:-)。ありがとうございます。投稿を編集して反映しました。
ソパラホデアリエレス

-3

行くrunか、後藤startと検索:

tasklist -m

tasklist -svc

5
呼び出し元のコマンドラインは表示されません。/mロードされたモジュール(DLLなど)を/svc表示し、各プロセスでホストされているサービスを表示します。
ボブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.