5

ショートカットからメモ帳や他のアプリケーションを開く方法はありますか?

これが私のコードです:

import java.io.File;
import java.io.IOException;

public class acrobat {

    public static void main(String[] args) throws IOException, InterruptedException {
         String[] notepad = {"C:\\Users\\Desktop\\notepad.lnk"};

         Process p = Runtime.getRuntime().exec(notepad);
         p.waitFor();
    }
}

ショートカットからアプリケーションを開きたいのですが、エラーが発生します..

    Exception in thread "main" java.io.IOException: Cannot run program "C:\Users\robert\Desktop\notepad.lnk": CreateProcess error=193, %1 is not a valid Win32 application
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at acrobat.main(acrobat.java:11)
Caused by: java.io.IOException: CreateProcess error=193, %1 is not a valid Win32 application
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 4 more

私がnotepad.exeを書いた場合、それは機能しますが、パスでは機能しません。ショートカットで開く方法はありますか?

4

2 に答える 2

7

デスクトップに表示されるショートカットは、実際には拡張子が.lnk. 実際のフルパスは次のとおりです。

C:\Users\Desktop\notepad.exe.lnk

実行しようとするとexec()「CreateProcess エラー ... は有効な Win32 アプリケーションではありません」というエラーが発生します。


ProcessBuilder幸いなことに、これらもユーティリティ クラスを介して実行できます。

public static void main(String[] args) throws Exception {
  ProcessBuilder pb = new ProcessBuilder("cmd", "/c",
                                      "C:\\Users\\robert\\Desktop\\notepad.lnk");
  Process p = pb.start();
  p.waitFor();
}



を使用する必要がある場合は、次の方法でファイルをRuntime.getRuntime().exec()開くことができます。lnkrundll32

Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +
                                      "C:\\Users\\robert\\Desktop\\notepad.lnk");
p.waitFor(); // watch out

ただし、このアプローチでは、p.waitFor();および類似のメソッド呼び出しが期待どおりの結果をもたらさない可能性があることに注意してください。ご覧のとおり、作成されたプロセスはrundll32、ショートカットの ( notepad.exe)ではなくです。

于 2013-07-25T14:02:18.387 に答える