C команда завершения программы

Мне нужно закрыть консоль, когда пользователь выбирает пункт меню.

Я пробовал использовать close() , но это не сработало ..

Как я могу это сделать?

ale 16 Апр 2011 в 01:10
Просто любопытно: для какого объекта вы пытались вызвать .Close ()?
Paul Sasik
16 Апр 2011 в 01:15
Отвечает ли это на ваш вопрос? Как указать выход код консольного приложения в .NET?
Michael Freidgeim

15 Ноя 2021 в 09:22

6 ответов

Лучший ответ

Environment.Exit и Application.Exit

Danny Beckett 11 Апр 2013 в 05:56

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

Environment.Exit(0);

Или закрыть текущий экземпляр формы:

this.Close();
Danny Beckett 11 Апр 2013 в 05:56

Вы можете попробовать это

Application.Exit();
Soner Gönül 11 Фев 2013 в 18:13
//How to start another application from the current application Process runProg = new Process(); runProg.StartInfo.FileName = pathToFile; //the path of the application runProg.StartInfo.Arguments = genArgs; //any arguments you want to pass runProg.StartInfo.CreateNoWindow = true; runProg.Start(); //How to end the same application from the current application int IDstring = System.Convert.ToInt32(runProg.Id.ToString()); Process tempProc = Process.GetProcessById(IDstring); tempProc.CloseMainWindow(); tempProc.WaitForExit();
SwiftArchitect 12 Сен 2015 в 19:20

return; будет выходить из метода на C #.

Ассемблер и Си для начинающих Урок 017 Демонстрационная программа работы команд сдвига и вращения СИ

Смотрите фрагмент кода ниже

using System; namespace Exercise_strings < class Program < static void Main(string[] args) < Console.WriteLine(«Input string separated by -«); var stringInput = Console.ReadLine(); if (string.IsNullOrWhiteSpace(stringInput)) < Console.WriteLine(«Nothing entered»); return; >>

Таким образом, в этом случае, если пользователь вводит пустую строку или пробел, использование метода return элегантно завершает метод Main.

THBBFT 29 Мар 2020 в 05:29

Таким образом, вы не сказали, что хотите, чтобы приложение завершилось или завершилось внезапно, поэтому в качестве другого варианта, возможно, просто элегантно завершите цикл ответа. (Я предполагаю, что у вас есть цикл while, ожидающий инструкций пользователя. Это код из проекта, который я только что написал сегодня.

Console.WriteLine(«College File Processor»); Console.WriteLine(«*************************************»); Console.WriteLine(«(H)elp»); Console.WriteLine(«Process (W)orkouts»); Console.WriteLine(«Process (I)nterviews»); Console.WriteLine(«Process (P)ro Days»); Console.WriteLine(«(S)tart Processing»); Console.WriteLine(«E(x)it»); Console.WriteLine(«*************************************»); string response = «»; string videotype = «»; bool starting = false; bool exiting = false; response = Console.ReadLine(); while ( response != «» ) < switch ( response ) < case «H»: case «h»: DisplayHelp(); break; case «W»: case «w»: Console.WriteLine(«Video Type set to Workout»); videotype = «W»; break; case «I»: case «i»: Console.WriteLine(«Video Type set to Interview»); videotype = «I»; break; case «P»: case «p»: Console.WriteLine(«Video Type set to Pro Day»); videotype = «P»; break; case «S»: case «s»: if ( videotype == «» ) < Console.WriteLine(«Please Select Video Type Before Starting»); >else < Console.WriteLine(«Starting. «); starting = true; >break; case «E»: case «e»: Console.WriteLine(«Good Bye!»); System.Threading.Thread.Sleep(100); exiting = true; break; > if ( starting || exiting) < break; >else < response = Console.ReadLine(); >> if ( starting )

Источник: question-it.com

Язык Си с нуля — Урок 54 — аргументы командной строки.

Завершение программы C++

В C++ вы можете выйти из программы следующими способами:

  • Вызовите функцию exit .
  • Вызовите функцию abort .
  • Выполните инструкцию return из main .

Функция exit

Функция, объявленная exit в , завершает программу C++. Значение, указанное в качестве аргумента , exit возвращается операционной системе в виде кода возврата программы или кода выхода. Принято, чтобы нулевым кодом возврата обозначалось, что программа завершена успешно. Вы можете использовать константы EXIT_FAILURE и EXIT_SUCCESS , также определенные в , чтобы указать на успех или сбой программы.

Функция abort

Функция abort , также объявленная в стандартном файле , завершает программу C++. Разница между exit и abort заключается в том, что exit позволяет выполнять обработку завершения среды выполнения C++ (вызов глобальных деструкторов объектов). abort немедленно завершает программу. Функция abort обходит обычный процесс уничтожения инициализированных глобальных статических объектов. Также осуществляется обход всей специальной обработки, которая была задана с помощью функции atexit .

Для корпорации Майкрософт. Для обеспечения совместимости Windows реализация abort microsoft может разрешить выполнение кода завершения БИБЛИОТЕКи DLL в определенных обстоятельствах. Для получения дополнительной информации см. abort .

Функция atexit

Используйте функцию , atexit чтобы указать действия, выполняемые до завершения программы. Глобальные статические объекты, инициализированные до вызова , atexit не уничтожаются перед выполнением функции обработки выхода.

Читайте также:
Какой программой открыть файл btw

return оператор в main

Оператор return позволяет указать возвращаемое значение из main . Оператор return в main первом действует так же, как и любое другое return утверждение. Все автоматические переменные уничтожаются. main Затем вызывает exit с возвращаемым значением в качестве параметра. Рассмотрим следующий пример.

// return_statement.cpp #include struct S < int value; >; int main() < S s< 3 >; exit( 3 ); // or return 3; >

Операторы exit и return в предыдущем примере имеют аналогичное поведение. Оба завершают программу и возвращают операционной системе значение 3. Разница заключается в том, что exit не уничтожает автоматическую переменную s , в то время как return оператор делает.

Как правило, C++ требует, чтобы функции, имеющие типы возвращаемых значений, отличные от void возвращаемых значений. Функция main является исключением; она может заканчиваться без return оператора . В этом случае он возвращает конкретное значение реализации в вызывающий процесс. (По умолчанию MSVC возвращает значение 0.)

Уничтожение потоков и статических объектов

При вызове exit напрямую (или при вызове после return оператора из main ) объекты потока, связанные с текущим потоком, уничтожаются. Затем статические объекты уничтожаются в обратном порядке их инициализации (после вызовов функций, указанных atexit в , если таковые имеются). В следующем примере показано выполнение такого процесса инициализации и удаления.

Пример

В следующем примере статические объекты sd1 и sd2 создаются и инициализируются перед записью в main . После завершения работы этой программы с помощью инструкции return сначала sd2 удаляется, а затем sd1 . Деструктор класса ShowData закрывает файлы, связанные с этими статическими объектами.

// using_exit_or_return1.cpp #include class ShowData < public: // Constructor opens a file. ShowData( const char *szDev ) < errno_t err; err = fopen_s(w» ); >// Destructor closes the file. ~ShowData() < fclose( OutputDev ); >// Disp function shows a string on the output device. void Disp( char *szData ) < fputs( szData, OutputDev ); >private: FILE *OutputDev; >; // Define a static object of type ShowData. The output device // selected is «CON» — the standard output device. ShowData sd1 = «CON»; // Define another static object of type ShowData. The output // is directed to a file called «HELLO.DAT» ShowData sd2 = «hello.dat»; int main()

Другой способ написания этого кода — объявить ShowData объекты с блоком область, который неявно уничтожает их при выходе из область:

Источник: learn.microsoft.com

Завершение работы процесса: Справочник по C#

Данная статья рассматривает три примера реализации завершения работы выбранного процесса, как с использованием его имени, так и идентификатора.

  • Пример №1 – использование метода «Kill» из класса «System.Diagnostics»;
  • Пример №2 – завершение процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе с использованием команды «TASKKILL»;
  • Пример №3 – использование Windows API функции «TerminateProcess» из библиотеки «Kernel32.lib».

Пример №1

В данном примере используется метод «Kill» из класса «System.Diagnostics». «Kill» вызывает аварийное завершение процесса и должен использоваться только при необходимости.
Данные, измененные процессом или ресурсами, выделенными для процесса, могут быть потеряны, если вызвать метод «Kill». Так же в данном классе присутствует метод «CloseMainWindow», который позволяет выполнить остановку процесса и закрыть все окна, поэтому является предпочтительным для приложений с интерфейсом. Запрос на завершение процесса вызовом метода «CloseMainWindow» не вынудит приложение завершиться. Приложение может запросить проверку пользователя до закрытия или может отказаться закрыться. В данном случае для того чтобы вынудить приложение закрыться, следует использовать метод «Kill».
Метод «Kill» выполняется асинхронно. После вызова метода «Kill» следует вызвать метод «WaitForExit» для ожидания завершения процесса или проверить свойство «HasExited», чтобы определить, завершился ли процесс.

//Немедленно останавливаем //выбранный процесс. clsProcess.Kill(); //Ждем завершения процесса. clsProcess.WaitForExit(); //Выполняем проверку если работающий системный процесс, //на который ссылается компонент //System.Diagnostics.Process, был завершен возвращаем true; //в противном случае — значение false. if (clsProcess.HasExited) return true; else return false;

Методы «Kill» и «CloseMainWindow» можно вызывать только для процессов, выполняющихся на локальном компьютере. Для удаленного компьютера можно только просматривать информацию о процессах. Если метод «Kill» вызван во время закрытия текущего процесса, создается Win32Exception с описанием ошибки: «Доступ запрещен«.

Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта элементы управления «comboBox» и «button». Первый будет отвечать за вывод списка имен запущенных в данный момент процессов, а второй выполнять вызов метода закрытия выбранного процесса. У вас получится приведенный ниже пример.

Читайте также:
Как поменять иконки программ на ПК

Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже код, вызова метода получения списка имен, запущенных процессов.

ProcessList();

Так же добавьте приведённый ниже код самого метода «ProcessList».

private void ProcessList() < //Получаем массив типа System.Diagnostics.Process, //предоставляющий данные обо всех процессах, //выполняющегося на локальном компьютере. System.Diagnostics.Process[] processlist = System.Diagnostics.Process.GetProcesses(); //Выполняем поиск всех процессов в полученном массиве //и добавляем их имена в элемент управления comboBox1. foreach(System.Diagnostics.Process theprocess in processlist) < //Добавляем имя текущего процесса //в элемент управления comboBox1. comboBox1.Items.Add(theprocess.ProcessName); >>

Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте приведенный ниже листинг, реализующий вызов метода «FindAndKillProcess», выполняющего поиск и завершение выбранного процесса в элементе управления «comboBox1». А так же возвращающего значение «true», если процесс был успешно завершён, иначе «false», с выводом информации о результате в сообщении.

//Вызываем метод поиска и завершения выбранного процесса. if (FindAndKillProcess(comboBox1.Text)) < MessageBox.Show(«Процесс успешно завершён!», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Information); //Очищаем устаревший список процессов. comboBox1.Items.Clear(); //Очищаем поле ввода. comboBox1.Text = «»; //Загружаем новый. ProcessList(); >else MessageBox.Show(«Ошибка при завершении процесса.», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Error);

Добавьте приведенный ниже код метода «FindAndKillProcess» в листинг главной формы.

public bool FindAndKillProcess(string name) < try < //Проходимся по всем процессам локального компьютера. foreach (System.Diagnostics.Process clsProcess in System.Diagnostics.Process.GetProcesses()) < //Определяем, совпадает ли начало имени процесса с указанным. //Если да, то метод «StartsWith» возвращает значение true //и вызывается метод удаления процесса, //в противном случае — значение false и происходит //переход к следующему процессу. if (clsProcess.ProcessName.StartsWith(name)) < //Немедленно останавливаем //выбранный процесс. clsProcess.Kill(); //Ждем завершения процесса. clsProcess.WaitForExit(); //Выполняем проверку если работающий системный процесс, //на который ссылается компонент //System.Diagnostics.Process, был завершен возвращаем true; //в противном случае — значение false. if (clsProcess.HasExited) return true; else return false; >> //Если процесс не был найден //возвращаем false. return false; > catch (Exception) < //При получении ошибок //возвращаем false. return false; >>

Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с заполненным списком имен запущенных в данный момент процессов.

Выберете из выпадающего списка, имя процесса, завершение работы которого вы хотите выполнить и нажмите на кнопку «Завершить». В случае если программе удастся или нет выполнить завершение, вы получите сообщение с соответствующей информацией.

Пример №2

Данный пример описывает завершение процессов по идентификаторам или именам исполняемых файлов на локальной или удаленной системе с использованием команды «TASKKILL». Команда может использоваться в операционных системах Windows XP и старше.

TASKKILL /F /IM notepad++.exe /T

  • /F — Принудительное завершение процесса.
  • /IM — Имя образа процесса, который требуется завершить. Знак подстановки «*» может быть использован для указания всех заданий или имен образов.
  • /T — Завершение указанного процесса и всех его дочерних процессов.

Так же можно выполнить завершение процесса по его идентификатору «PID», подставив соответственный ключ «/PID ». В случае если вам необходимо повысить свои привилегии при завершении работы процесса, вы можете воспользоваться ключами для указания учетных данных:
/U [] /P
Ниже представлены примеры реализации завершения работы процессов:

  • TASKKILL /IM notepad++.exe — завершение процесса, исполняемым образом которого является notepad.exe++. Если таких процессов более одного — то будут завершены все;
  • TASKKILL /PID 1568 /T — завершить процесс с идентификатором 1568 и все его дочерние процессы (/T) . Одной командой можно завершить несколько процессов, задавая их PID — taskkill /PID 1568 /PID 1569 /PID 1570;
  • TASKKILL /F /FI «PID ge 2015» /FI «WINDOWTITLE eq Arc*» — принудительно (/F) завершить процесс, идентификатор которого больше или равен 2000 и заголовок окна которого , начинается с текста Arc;
  • TASKKILL /F /FI «USERNAME eq NT AUTHORITYSYSTEM» /IM notepad++.exe — принудительно завершить процесс, выполняющийся в контексте учетной записи NT AUTHORITYSYSTEM и исполняемый файл которого имеет имя notepad.exe++;
  • TASKKILL /S 192.168.1.105 /U MyDomainuser /FI «USERNAME ne NT*» /IM * — завершить все процессы, выполняющиеся в контекстах учетных записей, не начинающихся со строки NT на компьютере с IP-адресом 192.168.0.243. При подключении к удаленной системе используется имя пользователя user в домене Mydomain. Пароль не задан и будет запрошен при выполнении команды;
  • TASKKILL /S SERVER /U MydomainUser /P UserPass /FI «IMAGENAME eq note*» — завершить все процессы, имя исполняемого файла которых начинается со строки note на удаленном компьютере с именем SERVER.
Читайте также:
Как настроить программы на телевизоре голдстар

ЧИТАТЬ ТАКЖЕ: Полный справочник по C#: Справочник по C#

Ниже приведен пример выполнения завершения процесса с использованием команды «TASKKILL».

try < System.Diagnostics.Process.Start(«taskkill», «/F /IM notepad++.exe* /T»); >catch (Exception msg_ex)

Пример №3

В данном примере для завершения работы процесса используется Windows API функция «TerminateProcess» из библиотеки «Kernel32.lib». Функция не дает процессу ни малейшего шанса самому провести очистку, операционная система высвобождает все принадлежавшие ему ресурсы: возвращает себе выделенную им память, закрывает любые открытые файлы, уменьшает счетчики соответствующих объектов ядра и разрушает все его User- и GDI-объекты.
После завершения процесса система гарантирует: после него ничего не останется — даже намеков на то, что он когда-то выполнялся. Завершенный процесс не оставляет за собой никаких следов. Синтаксис данной функции представлен ниже.

[System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] static extern bool TerminateProcess(int hProcess, uint uExitCode);

Параметр «hProcess» идентифицирует описатель завершаемого процесса, а в параметре «uExitCode» возвращается код завершения процесса.

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

Для проверки завершения процесса, можно проверить свойство «HasExited», из класса «System.Diagnostics.Process».
Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта элементы управления «comboBox» и «button». Первый будет отвечать за вывод списка имен запущенных в данный момент процессов, а второй выполнять вызов метода закрытия выбранного процесса. У вас получится приведенный ниже пример.

Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже код, вызова метода получения списка имен, запущенных процессов.

ProcessList();

Так же добавьте приведённый ниже код самого метода «ProcessList».

private void ProcessList() < //Получаем массив типа System.Diagnostics.Process, //предоставляющий данные обо всех процессах, //выполняющегося на локальном компьютере. System.Diagnostics.Process[] processlist = System.Diagnostics.Process.GetProcesses(); //Выполняем поиск всех процессов в полученном массиве //и добавляем их имена в элемент управления comboBox1. foreach(System.Diagnostics.Process theprocess in processlist) < //Добавляем имя текущего процесса //в элемент управления comboBox1. comboBox1.Items.Add(theprocess.ProcessName); >>

Перейдите в конструктор главной формы и сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте приведенный ниже листинг, реализующий вызов функции «TerminateProcess».

//Проходимся по всем процессам локального компьютера. foreach (System.Diagnostics.Process clsProcess in System.Diagnostics.Process.GetProcesses()) < //Определяем, совпадает ли начало имени процесса с указанным. //Если да, то метод «StartsWith» возвращает значение true //и вызывается метод удаления процесса, //в противном случае — значение false и происходит //переход к следующему процессу. if (clsProcess.ProcessName.StartsWith(comboBox1.Text)) < TerminateProcess((IntPtr)clsProcess.Id); if (clsProcess.HasExited) MessageBox.Show(«Процесс успешно завершён!», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Information); else MessageBox.Show(«Ошибка при завершении процесса.», «Завершение процесса», MessageBoxButtons.OK, MessageBoxIcon.Error); >>

Так же добавьте приведенный ниже листинг загрузки и вызова API функций.

[System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, IntPtr dwProcessId); [System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); [System.Runtime.InteropServices.DllImport(«kernel32.dll», SetLastError = true)] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] static extern bool TerminateProcess(int hProcess, uint uExitCode); const uint PROCESS_TERMINATE = 0x1; private void TerminateProcess(IntPtr PID)

Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма проекта с заполненным списком имен запущенных в данный момент процессов. Выберете из выпадающего списка, имя процесса, завершение работы которого вы хотите выполнить и нажмите на кнопку «Завершить». В случае если программе удастся или нет выполнить завершение, вы получите сообщение с соответствующей информацией.

Источник: csharpcoderr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru