Arayan yürütülebilir kullanarak işlem zaman zaman çöker

oy
2

Ben C # bir yürütülebilir arıyorum. çalıştırılabilir çalışır, bu C # kodu konsol çıktısını almak ve bir metin dosyasına yazıyor böylece konsola dışarı yazdığında. çarpışma birkaç şey olduğunda meydana gelir.

1) metin dosyasının çıkış tamamen yazılmaz. 2) yürütülebilir işlem sadece başarılı bir çalışma gibi bir rapor üretir çünkü tamamen aracılığıyla çalıştırmak gibi görünüyor.

Bu kaza nedeni çünkü dosyayı yazıyorum nasıl olduğunu sanıyorum.

Güncelleme: - Bildiğim kadarıyla kazasında olarak, bir iletişim Bu durumdan dolayı üzgünüz Yöneticisi bir sorunla karşılaştı ve kapatılması gerekiyor. Diyerek çıkageldi Sonra bir ok düğmesi vardır. Tamam düğmesine tıkladığınız zaman, seni bir daha yöneticisini başlatmak isteyip istemediğinizi soran kurulum var bir iletişim vardır.

  • yürütülebilir aradığını yöneticisi uygulaması tek dişli olan. yürütülebilir çok evreli çalıştırabilir.

İşte görüşmeden kısa bir snippet'idir:

  // Set up process to redirect standard output and standard error to
  // a file.
     process.StartInfo.UseShellExecute = false;
     process.StartInfo.RedirectStandardOutput = true;
     process.StartInfo.RedirectStandardError = true;
     FileInfo ofi = new FileInfo(outputPath);
     FileStream ofs = ofi.OpenWrite();
     StreamWriter sw = new StreamWriter(ofs);
     WriteToTextWriterEventHandler wtsweh = new WriteToTextWriterEventHandler(sw);
     DataReceivedEventHandler handler = wtsweh.HandleDataReceived;
     process.OutputDataReceived += handler;
     process.ErrorDataReceived += handler;
     //

     statusAcceptor.ReportStatus(Running process.);
     process.Start();
     process.BeginOutputReadLine();
     process.BeginErrorReadLine();

     statusAcceptor.ReportStatus(Waiting for process to complete.);
     process.WaitForExit();
     int processExitCode = process.ExitCode;
     process.Close();
     sw.Close();


  // 
  private class WriteToTextWriterEventHandler
  {
      private TextWriter tw;

      public WriteToTextWriterEventHandler(TextWriter tw)
      {
          this.tw = tw;
      }

      public void HandleDataReceived(object sendingProcess,
         DataReceivedEventArgs outLine)
      {
          // Collect the sort command output.
          if (!String.IsNullOrEmpty(outLine.Data))
          {
              tw.Write(Environment.NewLine + outLine.Data);
          }
      }
  }
Oluştur 09/12/2008 saat 20:53
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
1

Bu sizin işleyicilerindeki muhtemelen. Sen akışı işleyicileri tarafından atılan istisnalar işlemek için mantık koymak gerekir ve size sürecine yakın aramadan önce dere işleyicileri doğru olarak kapalı olduğundan emin olmak için bir mekanizma koymak gerekir. diğer afişler bunu çoğaltmak mümkün olmamıştır sürpriz beni doesnt yüzden böyle sorunlar nedeniyle olay işleyicileri ve process.close ile zamanlama sorunları kestirmek zor bulunmaktadır. Ama eylem gördük. Sorun, cancelErrorRead veya cancelOutputRead veya işlem çıkış çağırarak kapatılana kadar EventHandler etkin olmasıdır. Eh, ana iş parçacığı Process.Close kolaylaştırır ederken, sürecin sonuna bazı çıktı kızarma hala meşgulse ... BOOM

Cevap 10/12/2008 saat 14:26
kaynak kullanıcı

oy
1

Eğer çökmesini işlemi bir hata ayıklayıcı eklerseniz o yüzden kaza, tam bilecek. İşte ayıklama çöker hakkında ayrıntılı bir öğretici var: http://blogs.msdn.com/kirillosenkov/archive/2008/12/07/how-to-debug-crashes-and-hangs.aspx

Cevap 10/12/2008 saat 05:11
kaynak kullanıcı

oy
1

tw.Write sonra floş eklemeyi deneyin. Bu yürütülebilir hata iletileri içerebilir üretilecek başarısızlık noktasına, tam çıkış yukarı neden olmalıdır (yani kilitlenmesine yol buysa?)

Cevap 09/12/2008 saat 23:27
kaynak kullanıcı

oy
1

Eğer alıyorsanız kazasında nedir? A Net istisna mı?

Eğer dosya içine akışı temizlemek ve sonra kapatın çünkü dosya tamamen yazılmaz O olabilir.

Bence her iki standart için aynı akışını son kullanma ve iletileri hata bir sorun olabileceğini düşünüyorum. Bu eşzamanlılık sorunlara yol açabilir.

Cevap 09/12/2008 saat 21:05
kaynak kullanıcı

oy
0

Farklı yürütülebilir bir dizi kodunuzu test edilmiş ve bunu açıklamak şekilde çökmesine alamadı ettik. Belki de infaz konum sürecinde bir sorun var?

Cevap 09/12/2008 saat 23:38
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more