2014-01-23 3 views
2

Во-первых, у меня есть вопрос по этому вопросу, и я получаю ответы только на то, что я использую System.exit(0);, который не является тем, что я ищу. В настоящее время я открываю программу, используяJava, заканчивающийся программой

Runtime runtime = Runtime.getRuntime(); 
runtime.exec("C:\\Program Files\\program folder\\program.exe"); 

Это успешно открывает программу. Однако закрытие программы выглядит как совершенно другой чайник. Можно ли закрыть программу через java из-за разрешений и безопасности? Также это можно сделать с использованием среды выполнения или это более сложная проблема? Как я могу видеть, что окна единственным решением было бы использовать

taskkill /IM program.exe 

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

Edit:

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

ответ

4

Вы получаете процесс назад, когда вы делаете Runtime.exec доступа. В этом случае процесс, есть уничтожить метод:

http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html

Runtime runtime = Runtime.getRuntime(); 
Process p = runtime.exec("C:\\Program Files\\program folder\\program.exe"); 
p.destroy() 
+0

Единственная проблема с этим методом заключается в том, что он сразу же удаляет процесс. Что, если в середине обновления может привести к повреждению базы данных. Не существует способа инициировать запуск программы? –

+0

Нормальные базы данных будут защищены от такого сбоя :) Но я понятия не имею о Access. – pveentjer

+0

Да, нормальные базы данных, однако программное обеспечение, которое мы используем, развращает, если оно отключается неправильно. Которая является королевской болью –

1

Вы можете сделать:

Process p2 = runtime.exec("c:\\windows\\system32\\taskkill /IM program.exe") 

это стандартный убивать не убедительный один (что требует/F), следовательно, он просто уведомит программу, которую он должен прекратить спонтанно.

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

С помощью блокнота/F опция была немедленно прекращена, оставив файл несохраненным.

Это то же самое различие, которое у вас есть в unix между kill и kill -9.

Обратите внимание, что это прекратит выполнение всех процессов, в противном случае вы должны использовать pid.

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

Смежные вопросы