Как перезапустить приложение С# WinForm?
Разработка приложения WinForm С#.NET 2.0. Необходимо, чтобы приложение закрывалось и перезапускалось.
Application.Restart();
Каков лучший способ перезапустить приложение?
ОТВЕТЫ
Ответ 1
К сожалению, вы не можете использовать Process.Start() для запуска экземпляра текущего процесса. В соответствии с документами Process.Start(): «Если процесс уже запущен, никакой ресурс процесса не запускается. «
Этот метод будет работать отлично под отладчиком VS (потому что VS делает какую-то магию, которая заставляет Process.Start думать, что процесс еще не запущен), но не будет работать, если не будет запущен под отладчиком. (Обратите внимание, что это может быть специфично для ОС — я, кажется, помню, что в некоторых моих тестах он работал либо с XP, либо с Vista, но я могу просто помнить, как его запускать под отладчиком.)
Этот метод точно такой, который используется последним программистом в проекте, над которым я сейчас работаю, и я пытался найти обходное решение для этого в течение довольно долгого времени. До сих пор я нашел только одно решение, и он просто чувствует себя грязным и глупым для меня: запустите второе приложение, которое ждет в фоновом режиме для первого приложения, которое завершает работу, а затем перезапускает первое приложение. Я уверен, что это сработает, но, yuck.
Inery – это крупная технологическая компания. Запуск амбассадорской программы.
Изменить: работает 2-я прикладная программа. Все, что я сделал во втором приложении:
static void RestartApp(int pid, string applicationName ) < // Wait for the process to terminate Process process = null; try < process = Process.GetProcessById(pid); process.WaitForExit(1000); >catch (ArgumentException ex) < // ArgumentException to indicate that the // process doesn’t exist? LAME!! >Process.Start(applicationName, «»); >
(Это очень упрощенный пример. Реальный код имеет множество проверок работоспособности, обработки ошибок и т.д.)
Ответ 2
Если вы находитесь в основной форме приложения, попробуйте использовать
System.Diagnostics.Process.Start( Application.ExecutablePath); // to start new instance of application this.Close(); //to turn off current app
Ответ 3
Более простой подход, который работал у меня, это:
Application.Restart(); Environment.Exit(0);
Это сохраняет аргументы командной строки и работает, несмотря на обработчики событий, которые обычно предотвращают закрытие приложения.
Вызов Restart() пытается выйти, все равно запускает новый экземпляр и возвращается. Затем вызов Exit() завершает процесс, не давая возможности обработчикам событий. Очень короткий период, в котором работают оба процесса, что не является проблемой в моем случае, но, возможно, в других случаях.
Код завершения 0 в Environment.Exit(0); указывает на чистое завершение работы. Вы также можете выйти с 1 для указания произошедшей ошибки.
Ответ 4
Я могу опаздывать на вечеринку, но вот мое простое решение, и оно работает как шарм с каждым приложением:
Запуск программы невозможен так как на компьютере отсутствует
try < //run the program again and close this one Process.Start(Application.StartupPath + «\blabla.exe»); //or you can use Application.ExecutablePath //close this one Process.GetCurrentProcess().Kill(); >catch
Ответ 5
У меня была такая же точная проблема, и у меня также было требование предотвратить дублирование экземпляров — я предлагаю альтернативное решение для того, что предлагает HiredMind (что будет работать нормально).
То, что я делаю, — это запуск нового процесса с помощью processId старого процесса (тот, который запускает перезапуск) в качестве аргумента строки cmd:
// Shut down the current app instance. Application.Exit(); // Restart the app passing «/restart [processId]» as cmd line args Process.Start(Application.ExecutablePath, «/restart» + Process.GetCurrentProcess().Id);
Затем, когда запускается новое приложение, я сначала разбираю аргументы cm line и проверяю, есть ли флаг перезапуска с processId, а затем дождаться завершения этого процесса:
if (_isRestart) < try < // get old process and wait UP TO 5 secs then give up! Process oldProcess = Process.GetProcessById(_restartProcessId); oldProcess.WaitForExit(5000); >catch (Exception ex) < // the process did not exist — probably already closed! //TODO: —>LOG > >
Я, очевидно, не показываю все проверки безопасности, которые у меня есть, и т.д.
Даже если это не идеальный вариант, я считаю это подходящей альтернативой, так что вам не нужно иметь отдельное приложение, чтобы обрабатывать перезапуск.
Ответ 6
Простой вам просто нужно вызвать методы Application.Restart() , которые имеют тенденцию вызывать ваше приложение для перезапуска. Но вам придется выйти из локальной среды с кодами ошибок:
Application.Restart(); Environment.exit(int errorcode);
вы можете создать перечисление кода ошибки, чтобы вы могли использовать его эффективно.
Еще один метод — просто выйти из приложения и запустить процесс с исполняемым путем:
Application.exit(); System.Diagnostics.Process.Start(Application.ExecutablePath);
Ответ 7
Метод запуска/выхода
// Get the parameters/arguments passed to program if any string arguments = string.Empty; string[] args = Environment.GetCommandLineArgs(); for (int i = 1; i < args.Length; i++) // args[0] is always exe path/filename arguments += args[i] + » «; // Restart current application, with same arguments/parameters Application.Exit(); System.Diagnostics.Process.Start(Application.ExecutablePath, arguments);
Это работает лучше, чем Application.Restart();
Не знаете, как это работает, если ваша программа защищает от нескольких экземпляров. Я предполагаю, что вам лучше запустить второй .exe, который приостанавливается, а затем запускает ваше основное приложение для вас.
Ответ 8
Попробуйте этот код:
bool appNotRestarted = true;
Этот код также должен быть в функции:
if (appNotRestarted == true)
Ответ 9
Я понял другое решение, возможно, кто-то может его использовать.
Кодекс упрощен, поэтому позаботьтесь об исключениях и прочее;)
Ответ 10
Вы забываете параметры/параметры командной строки, которые были переданы вашему текущему запущенному экземпляру. Если вы не проходите мимо, вы не выполняете реальный перезапуск. Задайте параметры Process.StartInfo с параметрами клона вашего процесса, затем запустите.
Например, если ваш процесс был запущен как myexe -f -nosplash myfile.txt , ваш метод выполнил бы только myexe без всех этих флагов и параметров.
Ответ 11
Вы также можете использовать Restarter.
Restarter — это приложение, которое автоматически контролирует и перезапускает разбитые или зависающие программы и приложения. Он был первоначально разработан для мониторинга и перезапуска игровых серверов, но он будет выполнять задание для любой программы или приложения на основе консоли или формы.
Ответ 12
Я хотел, чтобы новое приложение запускалось после того, как старый отключился.
Использование process.WaitForExit() для ожидания выключения вашего собственного процесса не имеет смысла. Он всегда будет тайм-аут.
Итак, мой подход заключается в использовании Application.Exit(), затем подождите, но разрешите обработку событий в течение определенного периода времени. Затем запустите новое приложение с теми же аргументами, что и старые.
static void restartApp() < string commandLineArgs = getCommandLineArgs(); string exePath = Application.ExecutablePath; try < Application.Exit(); wait_allowingEvents( 1000 ); >catch( ArgumentException ex ) < throw; >Process.Start( exePath, commandLineArgs ); > static string getCommandLineArgs() < Queueargs = new Queue( Environment.GetCommandLineArgs() ); args.Dequeue(); // args[0] is always exe path/filename return string.Join( » «, args.ToArray() ); > static void wait_allowingEvents( int durationMS ) < DateTime start = DateTime.Now; do < Application.DoEvents(); >while( start.Subtract( DateTime.Now ).TotalMilliseconds > durationMS ); >
Ответ 13
public static void appReloader() < //Start a new instance of the current program Process.Start(Application.ExecutablePath); //close the current application process Process.GetCurrentProcess().Kill(); >
Application.ExecutablePath возвращает ваш путь к файлу aplication.exe Пожалуйста, следуйте порядку звонков. Возможно, вы захотите разместить его в предложении try-catch.
Ответ 14
Здесь мои 2 цента:
Последовательность Start New Instance- > Close Current Instance должна работать даже для приложений, которые не позволяют запускать несколько копий одновременно, так как в этом случае новому экземпляру может быть передан аргумент командной строки, который указывает, что существует перезагрузка выполняется, поэтому проверка других запущенных экземпляров не требуется. Ожидание того, что первый экземпляр действительно завершит мою реализацию, тоже необходимо, если абсолютно необходимо, чтобы не было двух параллельных операций.
Ответ 15
Я боюсь, что перезапуск всего приложения с помощью Process неправильно подходит к вашей проблеме.
Более простой способ — изменить файл Program.cs для перезапуска:
static bool restart = true; // A variable that is accessible from program static int restartCount = 0; // Count the number of restarts static int maxRestarts = 3; // Maximum restarts before quitting the program /// /// The main entry point for the application. /// [STAThread] static void Main() < Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); while (restart restartCount < maxRestarts) < restart = false; // if you like.. the program can set it to true again restartCount++; // mark another restart, // if you want to limit the number of restarts // this is useful if your program is crashing on // startup and cannot close normally as it will avoid // a potential infinite loop try < Application.Run(new YourMainForm()); >catch < // Application has crashed restart = true; >> >
Ответ 16
У меня была аналогичная проблема, но моя была связана с неуправляемой утечкой памяти, которую я не мог найти в приложении, которое должно работать 24/7. С клиентом я согласился с тем, что безопасное время для перезапуска приложения было 03:00, если потребление памяти превысило определенное значение.
Я попробовал Application.Restart , но, поскольку он, похоже, использует какой-то механизм, который запускает новый экземпляр, пока он уже запущен, я пошел на другую схему. Я использовал трюк, который обрабатывает файловая система, до тех пор, пока не завершится процесс их создания. Таким образом, из приложения я удалил файл на диск и не выполнил Dispose() дескриптор. Я использовал файл для отправки «сам» исполняемого файла и стартового каталога (чтобы добавить гибкость).
_restartInProgress = true; string dropFilename = Path.Combine(Application.StartupPath, «restart.dat»); StreamWriter sw = new StreamWriter(new FileStream(dropFilename, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)); sw.WriteLine(Application.ExecutablePath); sw.WriteLine(Application.StartupPath); sw.Flush(); Process.Start(new ProcessStartInfo < FileName = Path.Combine(Application.StartupPath, «VideoPhill.Restarter.exe»), WorkingDirectory = Application.StartupPath, Arguments = string.Format(«»»», dropFilename) >); Close();
Close() в конце будет инициировать завершение работы приложения, а дескриптор файла, который я использовал для StreamWriter , здесь будет оставаться открытым до тех пор, пока процесс не начнет умирать. Тогда.
Restarter.exe вступает в действие. Он TRIES читает файл в эксклюзивном режиме, не позволяя ему получить доступ до тех пор, пока основное приложение не будет мертвым, затем запустит основное приложение, удалит файл и будет существовать. Я предполагаю, что это не может быть проще:
static void Main(string[] args) < string filename = args[0]; DateTime start = DateTime.Now; bool done = false; while ((DateTime.Now — start).TotalSeconds < 30 !done) < try < StreamReader sr = new StreamReader(new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)); string[] runData = new string[2]; runData[0] = sr.ReadLine(); runData[1] = sr.ReadLine(); Thread.Sleep(1000); Process.Start(new ProcessStartInfo < FileName = runData[0], WorkingDirectory = runData[1] >); sr.Dispose(); File.Delete(filename); done = true; > catch (Exception ex) < Console.WriteLine(ex.Message); >Thread.Sleep(1000); > >
Ответ 17
Как создать файл bat, запустить пакетный файл перед закрытием, а затем закрыть текущий экземпляр.
Пакетный файл делает это:
- Подождите в цикле, чтобы проверить, вышел ли процесс.
- запустите процесс.
Ответ 18
Я использую следующее, и он делает именно то, что вы ищете:
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment; UpdateCheckInfo info = null; info = ad.CheckForDetailedUpdate(); if (info.IsUpdateRequired) < ad.UpdateAsync(); // I like the update dialog MessageBox.Show(«Application was upgraded and will now restart.»); Environment.Exit(0); >
Ответ 19
для использования в качестве выхода из системы вы должны прекратить все приложения из Ram Cache так что сначала закройте приложение, а затем повторите его.
//при нажатии кнопки выхода
foreach(Form frm in Application.OpenForms.Cast().ToList()) < frm.Close(); >System.Diagnostics.Process.Start(Application.ExecutablePath);
Ответ 20
Проблема использования Application.Restart() заключается в том, что он запускает новый процесс, но «старый» все еще остается. Поэтому я решил убить старый процесс, используя следующий фрагмент кода:
if(Condition)
И это работает хорошо. В моем случае MATLAB и приложение С# используют одну и ту же базу данных SQLite. Если MATLAB использует базу данных, Form-App должен снова перезапустить (+ обратный отсчет), пока MATLAB reset не будет занят бит в базе данных. (Только для дополнительной информации)
Ответ 21
Вы можете заключить свой код в функцию, а при необходимости перезапуска вы можете просто вызвать функцию.
Источник: utyatnishna.ru
Как перезапустить процесс
В работающем компьютере одновременно запущено множество процессов. Работа большинства из них протекает незаметно для пользователя, внешне никак не отображаясь на экране. Но при настройке компьютера или поиске причин некорректной работы операционной системы пользователь иногда сталкивается с необходимостью остановить или перезапустить какой-то процесс.

Статьи по теме:
- Как перезапустить процесс
- Как запустить процесс
- Как завершить процесс диспетчера задач
Инструкция
Все запущенные процессы делятся на запускаемые автоматически при старте системы и стартующие при нажатии пользователем на ярлык той или иной программы. Первые, в свою очередь, делятся на системные, необходимые для работы ОС, и процессы пользовательских программ, для которых установлена опция автозапуска.
Чтобы остановить процесс, надо знать его имя. Откройте командную строку: «Пуск – Все программы – Стандартные – Командная строка». Введите команду tasklist и нажмите Enter. Вы увидите список запущенных в системе процессов. Если вы не можете по названию процесса определить его принадлежность, воспользуйтесь программой Everest.
С ее помощью вы получите всю информацию о вашем компьютере, включая данные о запущенных процессах и пути к исполняемым файлам.
Остановить процесс можно несколькими способами. Самый простой – через «Диспетчер задач» (Ctrl + Alt + Del). Выберите в списке процессов тот, который вы желаете остановить, и кликните его правой кнопкой мышки. В открывшемся контекстном меню выберите «Завершить процесс». Помните о том, что вы не сможете остановить критически важные системные процессы, операционная система вам этого не позволит.
Остановить процесс можно и из командной строки, для этого введите команду taskkill /pid 1234 /f и нажмите Enter. Вместо «1234» введите идентификатор процесса (PID), его посмотрите в последней колонке списка, выводимого командой tasklist. Параметр f в команде определяет принудительное завершение процесса. Для просмотра всех вариантов использования команды taskkill введите в командной строке taskkill /? и нажмите Enter.
Если вы хотите остановить запущенную службу, откройте: «Пуск – Панель управления – Администрирование – Службы». Найдите нужную службу и дважды кликните ее мышкой. В открывшемся окне нажмите кнопку «Стоп», служба будет остановлена. Далее вы можете отключить ее запуск, выбрав в меню «Тип запуска» вариант «Отключить».
После остановки службы вы можете ее перезапустить, нажав кнопку «Старт». Кнопка видна в том случае, если в меню «Тип запуска» выбраны варианты «Авто» или «Вручную». Если выбран вариант «Отключено», кнопка будет неактивна.
Для запуска процесса, не являющегося службой и, соответственно, не отображающегося в списке служб, отыщите и запустите его исполнимый файл. Путь к файлу посмотрите в программе Everest до остановки процесса. Вы можете запустить процесс и из командной строки – например, для запуска Блокнота наберите в командной строке notepad.exe и нажмите Enter. Для запуска установленных вами программ необходимо ввести полный путь к исполнимому файлу.
Совет полезен?
Статьи по теме:
- Как перезагрузить операционную систему
- Как запустить процесс explorer
- Как перезапустить Internet Explorer
Добавить комментарий к статье
Похожие советы
- Как завершить сеанс пользователя
- Как перезагрузить браузер
- Как отключить процесс
- Как закрыть программу из командной строки
- Как запустить диспетчер задач через командную строку
- Как запустить закрытую программу
- Как вызвать диспетчер задач из командной строки
- Как перезагрузить компьютер из командной строки
- Как остановить сервис
- Как перезагрузить apache
- Как перегрузить систему
- Как выгрузить процесс
- Как получить список служб
- Как остановить apache
- Как удалить файл из командной строки
- Как перезапустить операционную систему
- Как закрыть диспетчер задач
- Как запустить репликацию
- Как перезапустить squid
- Как удалить Process Explorer
- Как перезапустить демон
- Как остановить перезагрузку
- Что делать, если комп завис
- Как выгрузить программу
Источник: www.kakprosto.ru
Перезапуск программы что это
Перезапуск приложений
версия: 1.1
Последнее обновление программы в шапке: 26.08.2015

Для функционирования программы необходимы права root пользователя.
Краткое описание:
Перезапуск приложений в один клик
Описание:
Применение изменений без перезагрузки девайса
Требуется Android: 4.х.х и выше
Русский интерфейс: Да
Разработчик: sagitt67
добавлены приложения:
— SecSettings — Настройки
— SecContacts_NoteBanded — Контакты
— SecMms_Candy — Сообщения
— SecMyFiles2014 — Мои файлы
Прошлые версии
Причина редактирования: добавлена ссылка на версию для Sony
17.08.15, 00:56 | #2
●
Почетные форумчане
Реп: ( 7365 )
Тестировалось на девайсах Samsung с Андроид 4.1.2 и 5.0.1, возможно будет работать на других девайсах и версиях Андроид.
17.08.15, 12:10 | #3
●
Друзья 4PDA
Реп: ( 206 )
Перезапуск Phone это как??
17.08.15, 12:17 | #4
●
Почетные форумчане
Реп: ( 7365 )
makskerch0
Phone и InCallUI на Самсунге (5.0.1) — это TeleService.apk (+ Telecom.apk) и LegacyInCallUI.apk , файлы выполняют функции звонилки, при изменении для их применения в некоторых случаях требуется перезагрузка девайса, приложение позволяет перезагрузить только приложения.
17.08.15, 13:03 | #5
●
Друзья 4PDA
Реп: ( 9375 )
при изменении для их применения в некоторых случаях требуется перезагрузка девайса, приложение позволяет перезагрузить только приложения.
очень актуально для таких прошивок, как альянс. При изменении параметров отображения (цвета фона, шрифта) и настроек дополнительного функционала вместо перезагрузки, использовать можно это приложение.
17.08.15, 13:12 | #6
●
Друзья 4PDA
Реп: ( 310 )
Galaxy Tab S 5.0.2 работает
Galaxy S4 5.0.1 работает
А может сделать поддержку всех системных приложений?
17.08.15, 13:32 | #7
●
Почетные форумчане
Реп: ( 7365 )
deluxe_mafia
По мере возможностей и наличии свободного времени буду обновлять приложение с добавлением (основных системных приложений, которые этого требуют).
17.08.15, 15:44 | #8
●
Друзья 4PDA
Реп: ( 206 )
Как я понял,приложение больше расположено для самсунгов :scratch_one-s_head:
17.08.15, 18:22 | #9
●
Почетные форумчане
Реп: ( 7365 )
makskerch0 О чем написал в 1-м посте
17.08.15, 20:02 | #10
●
Друзья 4PDA
Реп: ( 9 )
Доброго вечера. На Explay Fresh 4.4.2. работает.
23.08.15, 23:12 | #11
●
Друзья 4PDA
Реп: ( 615 )
Работает :thank_you: Note 4 — N910S Exynos Version.

25.08.15, 02:15 | #12
●
Друзья 4PDA
Реп: ( 5126 )
sagitt67,на Sony Zl(KK)- штора перезапускается(у seraj такой апк тоже есть со шторой,видел и хоум, только найти не могу),остальное пишет выполнено ,но никаких внешних изменений не вижу,как проверить перегружает-ли :blush:
25.08.15, 03:29 | #13
●
Друзья 4PDA
Реп: ( 4055 )
lolex,
Поставить «дымок» на звонилку 😉
25.08.15, 07:21 | #14
●
Активные пользователи
Реп: ( 1 )
Для модулей Xposed подходит?
25.08.15, 10:18 | #15
●
Почетные форумчане
Реп: ( 7365 )
lolex
Для проверки работоспособности — если установлена какая-либо модификация и для ее применения необходимо перезагрузить девайс, после запуска этой проги и соответствующего приложения см. применилось изменение, или нет.
elic70
Без разницы, как написал выше, если после применения пункта в Xposed нужна была перезагрузка девайса, то подойдет, но если для этого требует перезагрузки именно системное приложение, а не модуль.
25.08.15, 19:56 | #16
●
Почетные форумчане
Реп: ( 7365 )
lolex
Версию свою выложите, ссылку и укажите, что изменена под конкретный девайс и версию Андроид — будет разновидность программы под другие девайсы.
Источник: 4pda.to
Как закрыть и перезапустить приложения для iPhone и iPad
Приложения на вашем iPhone или iPad могут иногда зависать или работать беспорядочно. В этом случае вы можете закрыть приложение с помощью встроенной функции переключения приложений. Перезапуск приложения — лучший способ решить большинство проблем. Вот как это сделать.
Сначала запустите переключатель приложений.
Чтобы закрыть приложение на iPhone или iPad, вам нужно открыть встроенный переключатель приложений. Эта функция важна для многозадачности. Это позволяет вам управлять запущенными приложениями и легко переключаться между ними.
Вот как запустить переключатель приложений:
На iPhone X или новее / iPad с iOS 12 или новее: проведите вверх от нижнего края экрана, сделайте паузу около середины экрана и затем поднимите палец.
На iPhone и iPad с кнопками «Домой»: быстро дважды нажмите кнопку «Домой».
Используя переключатель приложений, мы принудительно закрываем приложение. Это означает, что приложение необходимо будет перезапустить и перезагрузить в следующий раз, когда вы его коснетесь. Этот метод может исправить некоторые временные проблемы, которые могут возникнуть с приложением.
Закрытие приложения с помощью переключателя приложений на iPhone
После запуска переключателя приложений на вашем iPhone вы увидите экран, похожий на показанный ниже. На дисплее будут отображаться большие эскизы всех недавно открытых вами приложений; вы можете провести пальцем влево или вправо, чтобы просмотреть их.
Пролистывайте миниатюры, пока не найдете приложение, которое хотите закрыть, и отцентрируйте его на экране.

Быстро проведите вверх по миниатюре приложения, пока он не исчезнет с экрана.

После этого эскиз больше не будет отображаться на экране переключателя приложений, потому что он теперь закрыт.

Чтобы перезапустить приложение, найдите его значок на главном экране и коснитесь его.
Закрытие приложения с помощью переключателя приложений на iPad
После запуска переключателя приложений на iPad (как описано выше) вы увидите сетку миниатюр всех приложений, которые вы недавно открывали. Если в последнее время вы использовали много приложений, вы можете проводить между ними влево или вправо, пока не найдете приложение, которое хотите закрыть.

Быстро проведите вверх по миниатюре приложения, пока она не исчезнет. При желании вы можете использовать несколько пальцев, чтобы закрыть более одного приложения за раз.

После того как вы проведете пальцем по миниатюре приложения, оно закроется и больше не будет отображаться на экране переключателя приложений.

Чтобы перезапустить приложение, коснитесь его значка на главном экране. Это должно перезапустить приложение, и (надеюсь) на этот раз оно будет работать правильно.
По-прежнему возникают проблемы с приложением?
Если после всего этого приложение по-прежнему дает сбой, зависает или вызывает другие проблемы, попробуйте перезагрузить iPhone или iPad. Если это не поможет, вы можете попробовать другие методы, включая обновление или переустановку приложения. Вы также можете попробовать связаться с разработчиком приложения и объяснить проблему. Удачи!
Источник: toadmin.ru