Çalışan bir programın komut satırı argümanlarını nasıl öğrenirim?


83

Örneğin bir programa hangi komut satırı parametrelerinin iletildiğini bulmak için bir araç veya yöntem arıyorum, örneğin başka bir program tarafından çalıştırıldığında (başlatıcı-uygulama senaryosu).

Yanıtlar:


71

İşlem Gezgini'ni kullanarak bunu yapabilirsiniz .

Başlamak için kullanılan komut satırı argümanlarını görmek için farenizi bir işlemin üzerine getirmeniz yeterlidir:
görüntü tanımını buraya girin

Alternatif olarak, işlemin özelliklerini açabilir ve oradaki komut satırını inceleyebilirsiniz:
görüntü tanımını buraya girin


2
Bu gerçekten havalı.
cutrightjm

2
Ne yazık ki, WinLicense / Themida ile korunan uygulamalarla çalışmıyor gibi görünüyor: oreans.com/winlicense.php Başka bir fikriniz var mı?
Gepard

@Gepard: İşe yaramadığını nereden biliyorsun? Aslında uygulamanın komut satırı argümanları ile çağrıldığından emin misiniz? Her iki durumda da PE, bu bilgiyi belirlemek için Windows yöntemini kullanır . Başka bir şeyin belirli bir uygulamaya özel olarak uyarlanması gerekeceğini varsayalım.
Der Hochstapler

6
Benim hatam, PE yükselmedi. Amaçlandığı gibi çalışıyor.
Gepard

@OliverSalzburg, Bu program nasıl çalıştı? Herhangi bir normal C programı bunu başarabilir mi?
Pacerier,

87

Bunu, Windows'un WMI hizmetini kullanarak İşlem Gezgini olmadan da yapabilirsiniz. Aşağıdakileri komut isteminden çalıştırın:

WMIC path win32_process get Caption,Processid,Commandline

Çıktıyı bir dosyaya dökmek istiyorsanız (okumasını biraz kolaylaştırır), / OUTPUT anahtarını kullanın:

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

4
Güzel, bunu nasıl bildin?
Pacerier

4
@Pacerier: Dürüst olacağımdan emin değilim ;-) WMI dokümanlarını araştırmaktan ve oyun oynamaktan geldiğini düşünüyorum çünkü o zaman WMI kullanmam gerekiyordu.
Andy E,

3
Hangi WMI dokümanlarına atıfta bulunuyorsunuz?
Pacerier,

3
Bu, çalışan bir işlemin komut satırını almak için çok yararlı bir komut satırı yöntemiydi. Benim durumumda, sadece belirli bir işlem için çıktı almak için bunu biraz ayarlayabildim: WMIC yolu win32_process, burada "caption = 'cmd.exe'" Commandline
chriv,

1
Harika ve nerede cümle bazı SQL özelliklerini destekliyor, örneğin, '' cmd.% ​​'Gibi bir ad
zhaorufei

39

Bir de Görev Yöneticisi kullanarak bunu başarabilirsiniz .

Görev yöneticisini açın (CTRL-SHIFT-ESC, CTRL-ALT-DELETE veya başka bir yöntemle).

Windows 7 için (ve muhtemelen Windows XP):

  • "İşlemler" sekmesine gidin. "Görünüm" menüsünde "Sütun Seç ..." seçeneğini seçin.
  • "Komut Satırı" onay kutusunu işaretleyin ve Tamam'ı tıklayın. (Bulmak için aşağı kaydırmanız gerekebilir)

Windows 8 için:

  • "Detaylar" sekmesine gidin. Sütunlardan herhangi birine sağ tıklayın (örn. Adlar, PID vb.) Ve "Sütunları seç" i seçin.
  • "Komut Satırı" onay kutusunu işaretleyin ve Tamam'ı tıklayın. (Bulmak için aşağı kaydırmanız gerekebilir)

Görüntülenen sütunlara, bir Komut satırı sütunu eklenecektir.


1
@JesseBarnum gerçekten anlamıyorum, biri komut satırı ne kadar uzun olursa olsun, tam bir görünüm elde etmek için her zaman sütunu yeniden boyutlandırabilir, değil mi?
Jeromy Adofo

1
Yalnızca pencere komutun boyutu için yeterince genişse. Komut, uzun bir sınıf yoluna sahip bir Java işlemi gibi bir şeyse, pencere genişliğine sığmaz.
Jesse Barnum,

1
Tamam, teşekkürler. Yine de bu sorunu yaşamamıştım ve bu arada görev yöneticim kaydırılabilir durumda - seninkileri bilmiyorum :-). Bana denemek için örnek bir program gönderirseniz, bunun çözüleceğini düşünüyorum.
Jeromy Adofo

6
Bu oldukça önemsenmeyen bir cevap, bunun mümkün olduğu hakkında hiçbir fikri yoktu.
Hashim

4
Windows Görev Yöneticisi hakkında yukarıda birkaç yorum görüyorum. 'Komut satırı' sütununu ayarlamış olsanız bile, gerçekten uzun bir komut satırına sahip bir Java işlemini göstermek için kesilecek. ANCAK, Görev Yöneticisi'ndeki satıra tıklayabilir ve tüm satırı 'kopyalayabilir' (Ctrl-c) ve komut satırının tamamını görmek için komut satırının tamamını görebilirsiniz.
JohnD

6

PowerShell'i kurtarmaya.

bul:

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

Ve bonus olarak öldür:

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 }

Sistem kurulumunuz varsa, doğrudan powershell'den veya ps1'den çalıştırabilirsiniz. Powershell ve diğer powershell püf noktaları ile zombileri öldürdüğümde sınırsız senaryo kurulumuna dikkat ediyorum ...


1
Whoa ... öldürme kısmı, sorunun başlığı, oldukça tehlikelidir;) Otheri, çok temiz bir cevap;)
Tom

5

Önceki yanıtlar, işlem zaten çalışıyorsa ve yakında sona ermeyecekse mükemmeldir. Bununla birlikte, (benim yaptığım gibi) bunu belki de işlemlerin birden fazla kez başlatılması ve / veya hızlı bir şekilde sonlandırılması veya daha uzun bir süre içinde gerçekleşen olayların günlüğe kaydedilmesi ile yapmanız gerekiyorsa, İşlem İzleyicisi'ni kullanmanın bir yolu vardır .

Temel olarak sistemdeki çeşitli olayları kaydeder, bu durumda "Process Start" olayını ve izlemek istediğimiz sürecin adını aşağıda gösterildiği gibi filtreleyebiliriz:

görüntü tanımını buraya girin

Ardından, işlem izleyiciyi çalışır durumda tutmaya devam edin ve oturum açmak istediğiniz işlemi gerçekleştirmek için ne yapıyorsanız yapın. "Ayrıntı" sütununda veya "Komut satırı" sütununda (bunları nasıl yapılandırdığınıza bağlı olarak) komut satırı argümanlarını görebilirsiniz. Örneğin:

görüntü tanımını buraya girin

Elbette bu yolla çalışma dizini nedir, süreçte hangi ortam değişkenlerinin geçirildiği vb. Gibi daha fazla ilgili bilgiyi elde edebilirsiniz. Ayrıca sonuçları bir dosyaya aktarmak kolaydır.


1

CygWin kullanırken , bir Python işlemi başlatırsam , bu bir komut satırı örneğidir:

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

Ancak Process Explorer sadece ana exe'yi görür:

İşlem Gezgini Python işleminin tam komut satırını algılamıyor

( "yolu: [Hata açma işlemi mesajı]") not alın (bkz. EDIT-1). İçin aynı sonuçlar tasklist:

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

Yani, şu ana kadar bildiğim tek numara CygWin Bash kabuğu aracılığıyla bulmak pgrep:

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

CygWin, Windows'ta sorun yaşamadığı sürece bunu bilmek faydalıdır ve birçok POSIX ve Python programını çalıştırmak için kullanabilirsiniz.

EDIT: Windows'ta görev listesi için yönetici ayrıcalıklarına ihtiyacınız yok. CygWin'de, bir yöneticinin işlemini görüntüleyebilmeniz gerekir (benim için daha mantıklı görünen şey: Komut satırının tamamı şifreler gibi bazı parametrelere sahip olabilir ), bu nedenle CygWin Bash'i Yükseltilmiş Yönetici Modunda çalıştırmalıyız .

EDIT-1: İşlem Gezgini'ni yönetici olarak çalıştırırsanız, bu sorun oluşmayacak. İşaret ettiğiniz için teşekkürler, @Pacerier.


2
Yönetici olarak [Error opening process message]
koşarsan göremezsin

Haklıydın, @Pacerier. Hatırlamak çok açık :-). Teşekkürler. Yayınımı yansıtacak şekilde düzenledim.
Sopalajo de Arrierez,

-3

git runveya git startve ara:

tasklist -m

tasklist -svc

5
Çağıran komut satırını göstermiyor. /myüklü modülleri (DLL'ler vb.) /svcgösterir ve her işlemde barındırılan hizmetleri gösterir.
Bob
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.