【问题标题】:Open and close applications from Java从 Java 打开和关闭应用程序
【发布时间】:2011-05-19 04:59:09
【问题描述】:

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

我知道使用

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+"M:\\myfile.doc"); 

打开 Word 文档 myfile.doc

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

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

谢谢!

问候!

【问题讨论】:

    标签: java file pid


    【解决方案1】:

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

    一个肯定会工作但不会跨平台的解决方案(我认为你并不关心,因为 Word 也不是跨平台的 :) 是使用另一个 windows shell 命令来获得你想要的,喜欢

    taskkill /IM word.exe
    

    您可以像打开 word 一样使用defaultRuntime.exec(...) 执行它。如果你打开了很多 word 进程并且你想杀死一个特定的进程,你将不得不解析任务列表以获得正确的 PID,然后尝试使用taskkill /PID XXXX

    【讨论】:

    • 我刚刚试了一下,它确实有效(在手动调用winword.exe 之后)。
    • 谢谢 Jack an Mark,我试试看。
    【解决方案2】:

    我不是Java专家,但是最近我接触到了你提到的功能。我记得,Runtime.getRuntime().exec() 返回一个 Process 类对象。

    您可以尝试如下操作:

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

    也许它会解决你的关闭问题。

    【讨论】:

    • 不幸的是,这实际上并没有杀死 Word。它适用于我认为的一般情况。如果您直接调用 Word(而不是通过 shell),它甚至都不起作用。
    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多