2013-04-15 12 views
7

C#' da çok yeni oluyorum, bu yüzden sorduğum soru küskün olabilir. Bazen ffmpeg'i çalıştırması gereken bir uygulama geliştiriyorum. Tahmin ettiğiniz gibi, bu ffmpeg süreci, barındırıcı uygulaması kapatıldığında öldürülmelidir. Bu görev için böyle kodu kullanın: (Bu arayüz veya Taskman beraber aracılığıyla - Uygulamalar)C#: Uygulamanın sürecine yakın süreci 'öldürme (görevliyle)

AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit); 
private void OnProcessExit(object sender, EventArgs e) 
    { 
     proc.Kill(); 
    } 

Uygulama doğru kapatıldığında bu, gayet iyi çalışıyor. Sorun, programın işleminin (Taskman - Processes ile) öldürülmesi durumunda OnProcessExit olayının tetiklenmeyeceğidir. Bildiğim kadarıyla, öldürme süreci ve kapanış programı eylemleri düşük seviyede aynı değil, ama sanırım, öldürme işlemi ona bir komuttur ve C# araçlarıyla ele alınabilir. Yani, bu durumda çocuk sürecini kapatmak mümkün mü? Bence

+3

[Bu soru] (http://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed?rq=1) görüşmeler onların ebeveyn öldürülür. –

+0

Teşekkürler, Scott Miller, [bu] [1] yöntemim benim sorunumu çözmek için gereken her şey. [1]: http://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed?rq=1 – JustLogin

+3

Hayır, bu kötü bir fikir. Kullanıcı mantıksız bir şey yaptığında makul bir şey yapmaya çalışmak sadece çaba harcamaktır. Hiç bir fikrin yok * neden * kullanıcı programınızı bu şekilde öldürmeye karar verdi. Ancak, genellikle programınızın hala düzgün çalıştığı için olmadığını varsayıyorsunuz. Ffmpeg'i öldürmek için ne yapmak niyetinde olursanız olun, iyi bir sonuca varacaksınız. İş nesneleri de çözüm değildir, Vista'da kötü bir şekilde kırılmışlardır. Şimdi iki problemin var. –

cevap

1

bu

Application.Exit(); 
0

I (Scott Miller öneri uyarınca) iş nesneleri kullanmak tavsiye deneyin. , Uygulama çöktüğünde

    uygulamanızı
  • başlatın
  • ondan sonra temizlemek: Başka bir seçenek aşağıdakileri yapar uygulamanıza için özel bir yardımcı uygulaması var olabilir.

Ama iş nesneleri o özellikle Program çıkar eğer dinlemek sonra konak program parametresi, olarak program kimliğini verebilmeleri ve bu

0

için yapılmış, kesinlikle daha iyi bir seçenektir. çocuk süreçleri zaman öldürme

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main(string[] args) 
     { 
      if (args.Length != 0) 
       new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(handelexit)).Start(args[0]); 

      // your code here 
     } 

     static void handelexit(object data) 
     { 
      int id = System.Convert.ToInt32(data.ToString()); 

      System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id); 
      while (!p.HasExited) 
       System.Threading.Thread.Sleep(100); 

      System.Environment.Exit(0); 
     } 
    } 
}