Sprawdzanie źródła uruchamiania skryptu

0

Witam,
Mam pytanie, ma ktoś większą wiedzę na temat skryptów i mógłby mi pomóc
jak sprawdzić źródło co uruchomiło skrypt ?
Tzn. chodzi o to że:
Plik xxx.exe uruchomi yyy.cmd i chciałbym żeby plik yyy.cmd zapisywał do logu czy został uruchomiony przez plik xxx.exe czy jakiś inny.

0

Pod linuxem mógłbyś za pomocą PS sprawdzić parent PID.

0

Z bólem serca, muszę wykorzystać to w windowsie. :P

0

Google mówi że:

wmic process where (name like '%nazwa_procesu%') get processid, parentprocessid

i z tego co widzę to nawet bangla, zwraca PID oraz parent PID dla procesów o danej nazwie

0

No tak, parentprocessid wskazuje PID procesu który go uruchomił. Już przedstawiam dlaczego to odpada:
Przykład 1:
plik1.cmd woła plik2.cmd (plik2.cmd sprawdza co go woła) . Muszę odwołać się po nazwie procesu albo czymś charakteryzującym się dla plik2.cmd żeby sprawdzić PID plik1.cmd . W obu przypadkach nazwa procesu to cmd.exe , ciężko sprawdzić bo wszystko wskazuje na "C:\Windows\System32\cmd.exe " a nie ścieżkę batchu na pulpicie czy gdziekolwiek.

Żeby zmienić nazwę procesu musiałbym użyć vbs, albo powershella pod windowsem. Microsoft zamiast wrzucać update to wymyśla kolejne gówna.
Chyba nic z tego. Muszę wymyślić inny mechanizm :)

0
Shalom napisał(a):

Google mówi że:

wmic process where (name like '%nazwa_procesu%') get processid, parentprocessid

i z tego co widzę to nawet bangla, zwraca PID oraz parent PID dla procesów o danej nazwie

Nie zadziała, ID rodzica nie musi być poprawny.
@Animusz_ W ogólnym przypadku chyba nie da się tego ustalić, więc pora zadać pytanie: po co Ci taka informacja? Co chcesz osiągnąć?

0

Można powiedzieć że mam parę aplikacji (plików *.cmd i *.exe) od różnych osób, porozrzucanych po dysku. <-- i nie chcę ich modyfikować.
Każda z tych aplikacji jest w pewien sposób uzależniona od mojego pliku xxx.cmd . (wykonują co jakiś czas wywołanie skryptu - np. w przypadku błędu jednej z nich).
I chciałbym wiedzieć która aplikacja mnie zawołała (ścieżkę do tej aplikacji/skryptu).
Informacja jest o tyle cenna, bo, dla przykładu, w przypadku gdy wiem ze jest jakiś błąd, blokuję pewną aplikację -> podejmuje jakieś ważne działanie.
Gdybym miał mechanizm "wykrywania" kto mnie woła, mógłbym od razu informować kto potrzebował blokady aplikacji. :)

0

Może spróbuj iść w stronę katalogu roboczego - jeżeli te aplikacje są w innych katalogach, to po uruchomieniu Twojego pliku możesz mieć katalog roboczy ustawiony na taki, jak miała wołająca aplikacja. Oczywiście ta metoda też nie zadziała w ogólności, ale może akurat tutaj się sprawdzi.
Możesz też robić sztuczki z przekierowaniami - nie wiem, jak te aplikacje wywołują Twój skrypt, ale może wystarczyłoby każdej podstawić inny skrypt, który wołałby docelowy wraz z przekazaniem mu odpowiedniej informacji. Takie coś mógłbyś zrobić przez odpowiednią modyfikację zmiennej PATH dla każdej aplikacji z osobna. Gorzej, jeżeli wszystkie mają zahardkodowaną ścieżkę do Twojego skryptu.

0

Z tym katalogiem roboczym próbowałem po ParentID wyłuskiwać, ale dla każdego batcha typu cmd/bat był C:\Windows\System32\cmd.exe ;)
Nie chcę, ale wynika z tego że muszę wziąć się za modyfikację każdej aplikacji i wywoływać mój batch z odpowiednim parametrem niosącym tę informację...

0

Jak jesteś bardzo zdesperowany to możesz przeparsować commandline parenta. Stąd będziesz mógł wziąć nazwę skryptu.
Przykładowo jeżeli parent skrypt nazywał się a.bat to jego commandline będzie wyglądał mniej więcej tak: cmd.exe /c "a.bat" (ta metoda się nie sprawdzi jeżeli parent zakończy się wcześniej niż próbujesz się dobrać do commandline'a ale może akurat to nie jest twój przypadek).

Tutaj masz artykuł jak dobrać się do commandline'a innego procesu: http://blogs.msdn.com/b/oldnewthing/archive/2009/11/25/9928372.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1