Proces został przerwany z powodu nieobsłużonego wyjątku

0

Hej,

Napisałem sobie małą aplikację konsolową, która po starcie uruchamia Timera. W zdarzeniu Timera uruchamiany jest proces, który zwraca pewien ciąg znaków, a następnie zapisuje do pliku txt:

 static void Main(string[] args)
        {
            TimerCallback callback = new TimerCallback(Tick);
            Console.Write("-------------  License Analyser -------------");
            Timer stateTimer = new Timer(callback, null, 0, 60000);
            Console.Read();
        }

        static public void Tick(Object stateInfo)
        {
            try
            {
                Console.Clear();
                Console.Write(DateTime.Now.ToString() + "  Uruchamianie procesu");
                using (Process p = new Process())
                {
                    string output = string.Empty;
                    p.StartInfo.UseShellExecute = false;
                    p.StartInfo.CreateNoWindow = false;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.FileName = @"Program.exe";
                    p.StartInfo.Arguments = @"Arguemtny";
                    p.Start();
                    Console.Write(DateTime.Now.ToString() + "  Zapisywanie danych");
                    output = p.StandardOutput.ReadToEnd();
                    p.WaitForExit();

                    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"Zapis.txt"))
                    {
                        file.Write(output);
                        Console.Write(DateTime.Now.ToString() + "  Zapisano");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
            Console.WriteLine("\nTick: {0}", DateTime.Now.ToString("h:mm:ss"));
        }

I wszystko fajnie działa przez powiedzmy ... godzinę. Po tym czasie nie dzieje się nic. W podglądzie zdarzeń mam:

proces został przerwany z powodu nieobsłużonego wyjątku.
Informacje o wyjątku: System.ComponentModel.Win32Exception
w System.Diagnostics.Process.StartWithCreateProcess(System.Diagnostics.ProcessStartInfo)
w System.Diagnostics.Process.Start()
w License_Analyser.Program.Main(System.String[])

Oraz

Nazwa aplikacji powodującej błąd: License Analyser.exe, wersja: 1.0.0.0, sygnatura czasowa: 0x5b61947d
Nazwa modułu powodującego błąd: KERNELBASE.dll, wersja: 6.1.7601.24150, sygnatura czasowa: 0x5b0cba25
Kod wyjątku: 0xe0434352
Przesunięcie błędu: 0x0000c54f
Identyfikator procesu powodującego błąd: 0x864
Godzina uruchomienia aplikacji powodującej błąd: 0x01d42987f28cea00
Ścieżka aplikacji powodującej błąd: ... License Analyser.exe
Ścieżka modułu powodującego błąd: C:\Windows\syswow64\KERNELBASE.dll
Identyfikator raportu: 30fc5f50-957b-11e8-a924-7a4e081668a7

Nie mam zielonego pojęcia, co może być problemem.
Mógłbym prosić o wsparcie?

Edit:
I jeszcze jedno pytanie - co w powyższym kodzie jest źle, że proces za każdym wywołaniem zdarzenia Tick() zajmuje coraz więcej pamięci? Nie są to ogromne wartości, ale jednak...

0

Program nie wykonuje całego kodu z metody Tick, tylko zatrzymuje się na linii:

output = p.StandardOutput.ReadToEnd();

Tym samym z każdym wywołaniem tej metody pojawia się kolejny "wiszący" proces w pamięci.

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