Çalışan Exe ler arasında dosya ismi harici kriter verebilme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Çalışan Exe ler arasında dosya ismi harici kriter verebilme

Mesaj gönderen vkamadan »

Merhaba değerli üyeler ,
kendi ürettiğimiz Dosya.exe isimli programın o an çalışıp çalımadığını anlıyoruz , fakat aynı programı farklı parametrelerle çalıştırıyoruz ve ayırt etmek istiyoruz örneğin ;

Kod: Tümünü seç

dosya.exe -ilk
dosya.exe -ikinci
.
.
n
Windows a şöyle bir soru sorabilir miyiz ? "dosya.exe -ilk" prosesi çalışıyor mu?
mesela dosya.exe çalıştığında kendisiyle ilgili ekstra bir bilgiyi process listte kendi processID si ile ilişkili bir şekilde windows a tutturabilirmi? sonrasında processlist i aldığımızda exe adına ilave ilişkili bilgisinede bakıp birşeyler yapılabilir ama nasıl ?

Umarım anlatabilmişimdir, iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Çalışan Exe ler arasında dosya ismi harici kriter verebilme

Mesaj gönderen thelvaci »

Merhaba Volkan bey, istediğinizi yapabilmenizin bir kaç yolu var. Bildiğiniz gibi normalde, uygulamamız içinde bir process'e geçilen parametreleri ParamCount & ParamStr fonksiyonları ile elde ediyoruz. Bu metodların derinlerine indiğinizde GetCommandLine API'sini gözlemleyeceksiniz. Ancak bu API, geçerli process için komut satırı bilgisini döndürmektedir. Hali hazırda çalışan bir process'in komut satırı argümanlarına bu API vasıtası ile erişemezsiniz.

Bu bağlamda, bir kaç yol mevcut kullanabileceğiniz ancak bu yollarda biraz çetrefelli. Çetrefelli diyorum çünkü bir kısım önereceğim yollar undocumented yani dökümante edilmemiş dolayısı ile Windows'un ilerleyen versiyonlarında çalışma şekli değişebilir yada tamamen kaldırılabilir. Bunlardan birincisi NtQuerySystemInformation yada NtQueryInformationProcess API'si ve ProcessBasicInformation yapısı vasıtası ile Process Environment Block(PEB) üzerinden komut satırına erişebilirsiniz. Tabii bunun için epey bir kod yazmanız gerekecek.

Bir diğer yol, WMI kullanmak. WMI ile Win32_Process sınıfı üzerinden CommandLine üyesinin değerini okuyabilirsiniz. Yada; bu uygulamaları siz yazdığınıza göre IPC (Interprocess communications) mekanizmaları vasıtası ile processleriniz ile haberleşebilir ve ilgili process'e GetCommandLine API'sini çalıştırmasını ve sonucunu iletmesini söyleyebilirsiniz. Sanıyorum bu en kolay yol olabilir.

Tercih sizin.

Not: Merak edenler için bir kısım undocumented api'nin dökümantasyonuna buradan erişebilirsiniz.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Çalışan Exe ler arasında dosya ismi harici kriter verebilme

Mesaj gönderen vkamadan »

Tuğrul hocam ufuk açıcı cevabın için çok teşekkür ederim ,sizinde ön gördüğünüz en kolay yöntem olan WMI üzerinden giderek CommandLine ı aldım istediğim sonuca ulaşabildim.
iyi çalışmalar dilerim.
Volkan KAMADAN
www.polisoft.com.tr
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Çalışan Exe ler arasında dosya ismi harici kriter verebilme

Mesaj gönderen thelvaci »

İşinize yaramasına sevindim. Size de iyi çalışmalar.
Cevapla