Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java打开和关闭应用程序_Java_File_Pid - Fatal编程技术网

从Java打开和关闭应用程序

从Java打开和关闭应用程序,java,file,pid,Java,File,Pid,我想制作一个程序来打开和关闭您在计算机上安装的应用程序 我知道使用 Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"M:\\myfile.doc"); 打开Word文档myfile.doc 问题是使用此命令无法关闭在执行该命令时打开的Word应用程序 如何从java程序打开和关闭应用程序 谢谢你 问候 我不是Java专家,但是最近我接触了您提到的函数。我记得,Runtime.getRuntime().ex

我想制作一个程序来打开和关闭您在计算机上安装的应用程序

我知道使用

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"M:\\myfile.doc"); 
打开Word文档myfile.doc

问题是使用此命令无法关闭在执行该命令时打开的Word应用程序

如何从java程序打开和关闭应用程序

谢谢你


问候

我不是Java专家,但是最近我接触了您提到的函数。我记得,Runtime.getRuntime().exec()返回一个进程类对象

您可以尝试执行以下操作:

Process word = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"M:\\myfile.doc");
// some logic
word.destroy();

也许它可以解决您的关闭问题。

您可以尝试存储由
exec()
返回的
进程
,并对其调用
destroy()
,但我认为它不起作用,因为您正在执行一个windows命令,该命令启动一个新进程,而该进程随后不由JVM管理(JVM只能看到rundll32)

一个肯定有效但不会跨平台的解决方案(我认为您实际上并不关心,因为Word也不是跨平台的:)是使用另一个windows shell命令来获得您想要的,如

taskkill /IM word.exe

您可以使用
defaultRuntime.exec(…)以与打开word相同的方式执行它
。如果您打开了许多word进程,并且想要杀死一个特定的进程,那么您必须解析任务列表以获得正确的PID,然后尝试使用
taskkill/PID XXXX

,不幸的是,这实际上并没有杀死word。我想它适用于一般情况。如果您直接调用word,它甚至不起作用(不是通过shell)。我只是尝试了一下,它确实有效(在手动调用
winword.exe
之后)。谢谢杰克·安·马克,我会试试的。