I
I
Ivan Petrov2017-10-17 15:02:36
Programming languages
Ivan Petrov, 2017-10-17 15:02:36

What language is suitable for launching and closing exe applications?

Hello.
I'm trying to develop one program.
The task is this - you need a window application, in this application I specify the path to the exe file, after which I click run and the exe file starts, and you need to pass parameters.
You also need the ability to close the running program. I don’t know if I need to track the process, but I find it convenient to simply find a specific port and close the application that uses it.
I worked only in the field of the web, tell me where to start? I am familiar with Java but I don’t understand whether it is possible to implement what I need in java or not.
C++ is not desirable to use, is C# suitable?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexey Nemiro, 2017-10-17
@bitande

Any language can do this :-)
In C# , working with processes can be something like this:

// запускаем процесс
var process = System.Diagnostics.Process.Start(@"C:\windows\system32\calc.exe");
// убиваем процесс
process.Kill();
// или отправляем команду на закрытие главного окна
// process.CloseMainWindow();

// запуск можно выполнить через ProcessStartInfo,
// это может быть более удобней и больше возможностей
var processStartInfo = new System.Diagnostics.ProcessStartInfo();
// путь к файлу программы
processStartInfo.FileName = @"C:\windows\system32\notepad.exe";
// передаем аргументы (в данном случае путь файла для открытия)
processStartInfo.Arguments = @"C:\Windows\System32\drivers\etc\hosts";

// запускаем процесс
var process2 = System.Diagnostics.Process.Start(processStartInfo);

// если необходимо, можем получить список всех процессов
var processes = System.Diagnostics.Process.GetProcesses();

// для примера, выводим в консоль
foreach(var p in processes)
{
  Console.WriteLine("PID#{0}, {1}", p.Id, p.ProcessName);
  // можем поубивать все блокноты
  // if (p.ProcessName == "notepad")
  // {
  //   p.Kill();
  // }
}

When starting processes, you can simply remember their identifiers (for example, into a collection, of the List<int> type, or use your own type, and / or remember Process instances ) and subsequently terminate these processes.
Information about running processes can be obtained using the following methods: System.Diagnostics.Process.GetProcessById() - by process ID, System.Diagnostics.Process.GetProcessByName() - by process name.
If necessary, you can attach a process termination handler to each created process:
// создаем параметры запуска процесса
var processStartInfo = new System.Diagnostics.ProcessStartInfo();
processStartInfo.FileName = @"C:\windows\system32\notepad.exe";
processStartInfo.Arguments = @"C:\Windows\System32\drivers\etc\hosts";
      
// создаем экземпляр процесса
var process = new System.Diagnostics.Process();
// передаем параметры
process.StartInfo = processStartInfo;
// разрешаем использование обработчиков событий
process.EnableRaisingEvents = true; // <-- требуется для работы обработчика завершения процесса

// цепляем обработчик завершения работы процесса 
// (лучше сделать нормальную функцию, а не анонимную, как показано в примере)
process.Exited += (object sender, EventArgs e) =>
{
  // этот блок будет выполнен, когда работа процесса будет завершена
  // экземпляр процесса можно найти в sender: строгий тип - ((System.Diagnostics.Process)sender)
  // (хотя в данном примере без проблем можно использовать process, это будет даже удобней)

  // для примера, выводим в консоль идентификатор завершенного процесса
  Console.WriteLine("PID#{0} завершил работу", ((System.Diagnostics.Process)sender).Id);
};

// запускаем процесс
process.Start();

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question