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...