Постоянно запущенный исполняемый файл
-
27-09-2019 - |
Вопрос
Я создал приложение WinForm (Monitoring) с использованием VS 2005 (C #), и теперь у меня есть проблема, когда это приложение сбивает по какой-то причине, я должен быть уверен, что он будет перезапущен автоматически.
Как я могу решить это? (Может быть, используя приложение Windows Services?)
Спасибо
Решение 6
Спасибо всем, решение, которое я выбираю: в главной программе я добавляю события исключения (UnhandlededExceptionEventhandler & ThreadExceptionEventHandler см. Выше) В этих событиях я перезагружаю программу (также поместите журнал и электронную почту в отслеживание ошибок). И для задачи перезагрузки я добавляю ключ реестра в [HKEY_LOCAL_MACHINE Software Microsoft Windows Centreversion Run] с моим путем приложения, чтобы убедиться, что мое приложение будет перезапущено после перезагрузки Windows;)
Другие советы
Да, создание Windows Service будет работать, как вы можете установить его, чтобы автоматически перезапустить, если он сбивает сбой, но лучший способ, чтобы предотвратить разбойник в первую очередь! Есть ли определенная причина, по которой это вылетает?
С хорошей обработкой ошибок и сообщению, вы можете написать его, чтобы он просто сообщил о любых ошибках, которые возникают и выполняют, какие IMHO будет лучшим путем для перехода
Учти это:
http://msdn.microsoft.com/en-us/library/cc303699.aspx.
[DllImport("kernel32.dll")]
public static extern int RegisterApplicationRestart(
[MarshalAs(UnmanagedType.BStr)] string commandLineArgs,
int flags);
Минимальный поддерживаемый сервер
Windows Server 2008.
http://msdn.microsoft.com/en-us/library/aaa373347(vs.85).aspx.
Создание службы Windows - это очень хорошая идея для любого длинного фонового процесса по многим причинам, Однако повторно запуск разбитого приложения не является одним из них!
Вы должны отработать, почему приложение разбивается и предотвращает его происходящее.
Все средства, также преобразуйте свое приложение в службу Windows - вы увидите много преимуществ, однако правильный способ решить вашу проблему - это исправить сбой приложения в первую очередь.
За*сильный текст* Приложение для наблюдения. Вы должны создать таймер на службе Windows и Code что-то вроде этого в Timer Tick Ticking Event:
Process[] procs = Process.GetProcessesByName("you app name");
if (procs.Length == 0)
Process.Start("your app filename");
Если вы действительно не сможете сделать что-либо о проблеме с крахом, я бы порекомендовал попробовать вместо наблюдателя. (Не забудьте перебрасывать обрабатываемые основные исключения)
[STAThread]
static void Main()
{
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch(Exception ex)
{
//log the exception here
Application.Restart();
}
}
Поскольку вы говорите, что вы используете приложение Windows Forms, вы не можете использовать службу Windows для этого, поскольку служба Windows не разрешается иметь графический интерфейс.
То, что я бы сделал это, что я бы создал невидимое приложение «Watchdog», которое контролирует процесс и автоматически перезапускается его, когда он сбивает.
Вы можете поставить пробовать ловить блокировку вокруг кода, который, скорее всего, вызывает сбой. Затем напишите сообщение об исключении в файл журнала. Вы также можете установить точку отладки в блоке Catch Catch, чтобы увидеть другие детали, такие как стек вызова и т. Д.