Powershell: Çocuk değil ebeveynleri öldürmek mi?

Sep 21 2020

Bir CMD toplu iş dosyasını çalıştırmak için bir simgeye tıklayarak başlıyorum. (siyah CMD penceresi) Bu, bir powershell betiğini açar. Sırayla, bu bir GUI açan ikinci bir komut dosyası başlatır. Kullanıcı, GUI'de bir seçim yapar ve bir tarayıcı penceresi açılır.

Ancak, tarayıcı açıldığında, CMD'yi açık bırakır (hata denetimini etkinleştirmek için toplu iş dosyasındaki CMD / k'yi kaldırarak bunu 'öldürebilir'). Ancak tarayıcı açıldıktan sonra GUI'yi 'öldürebilir miyim'?

Şu anda GUI'yi açmak için "Başlatma-İşlemi" ve ardından tarayıcıyı açmak için ikinci komut dosyasında başka bir "Başlatma İşlemi" kullanıyorum. Bunun 'tek iş parçacığı' olduğuna inandığım için, her işlemin kendisini kapatmadan önce 'çocuk'un bitmesini beklemesi gerektiğini düşünüyorum, oysa ideal olarak CMD / Powershell'in tarayıcılar açıldıktan sonra çıkmasını istiyorum.

** Şu ​​ana kadar 300 satırdan fazla kod göndermedim.

+++++ Bana birkaç ipucu verdiği için "HarryMC" ye teşekkürler. Onun "Başlat" önerisini toplu iş dosyasına ekledim ve ardından CMD penceresini kapatmaya devam ettim ... bunun yerine bir Powershell penceresi + GUI açtım. Sonunda, PS penceresini gizleyebileceğinizi fark ettiniz, bu nedenle tüm satır:

Start PowerShell -WindowStyle Hidden -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"

Bu, GUI yüklenmeden önce ekranda yanıp sönen iki pencerenin olduğu, ancak oraya ulaştığım anlamına geliyor. Zira, pencereyi gizlemek sürecin sona erdiği anlamına gelmez - bir sonraki araştırma bölümü - ancak (şimdiye kadar) son kullanıcı için "daha temiz" görünüyor.

Yanıtlar

1 harrymc Sep 21 2020 at 02:51

Programlarınızı, her biri kendi ebeveyninin çocuğu olacak şekilde açıyorsunuz. Ebeveynin sonlandırmasına izin verebilmek için, her programı bağımsız bir süreç olarak başlatmanız gerekir.

CMD için, komut başlatmak .
PowerShell için Çağrı operatörünü & .

Her program bir sonrakini çağırmalı, sonra kendini sonlandırmalıdır ki bu onu öldürmekten daha basittir. CMD ve PowerShell, tek bir komutu ( cmd /c commandve powershell "command") yürütmek için çağrıldığında otomatik olarak sona erecektir .