2011-01-20 10 views
1

java(.exeファイルを指すlnkファイル)で.lnkファイルを実行する必要があります。どのようにできるのか? VB .NETでJavaでファイル.lnkを実行

私は

Process.Start(path) 

を行うと、それはあなたが助けを求め

THXに動作します。

+0

'.lnk' => WindowsのOSを持っているのでしょうか? –

答えて

5

ProcessBuilderを使用してください。

+0

大丈夫、それは動作します! しかし、今私はちょうど始めたプロセスのPIDが何であるか知る必要があります。 thx – raf

+0

補足的な質問をする場合は、元の質問を編集することをお勧めします。 – DJClayworth

+0

pidを見つけることが全く違うワームであるので、新しい質問を作成するのが最善でしょう:) – dogbane

0

JavaはOS固有の機能をサポートしていませんが、java.awt.Desktop.openはこれを行う必要があります。 Windowsでは

1

、あなたはrundllを使用することができます。プロセスの出力とエラー出力を読み取ること

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "C:\\temp\\file.lnk"); 
Process process = pb.start(); 

コールprocess.getInputStream()process.getErrorStream()

Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + 
    "\Path\to\File.lnk"); 
0

また、ProcessBuilderを使用することもできますが、実際のrundll32へのパスが必要です。 小さな「階層型の送信先」アプリで奇妙なバグをソートしようとしていましたが、 (私はそのウィンドウが嫌い、XPの後に "flatten"、 "Send to"オプションのリンクが愚かなリストになっています;ツリーとして、私が使っている40の奇妙な小さなオプションシステム)

ここでは、リンク(または任意のファイルの種類)を呼び出すアクションのコードです:

ArrayList<String> app = new ArrayList<>(); 
app.add("C:\\Windows\\System32\\rundll32.exe"); 
app.add("SHELL32.DLL,ShellExec_RunDLL"); 
app.add(file.getAbsolutePath()); 

// Args are passed by windows when it launches the "More Sends" jar 
for (int i = 0; args != null && i < args.length; i++) { 
    app.add(args[i]); 
} 

ProcessBuilder b = new ProcessBuilder(app); 
// The logger thread hangs till the called process does not die... not ideal 
// log(
    b.start() 
//) 
; 

ただし、Java経由の.lnkウィンドウを呼び出すの全体shenhaniganはかなり混乱した結果を与えることができます。

x.jarに直接リンクすると、システムJava VMでjarを開くことができますが、インストールされたjre/bin/javaw.exe -jar "x.jar"への直接リンクが失敗し、 「ファイルを見つける」というメッセージが表示されます。

これはまったく同じ方法で呼ばれる別のジャーが間違いなく実行されます。いくつかは、私の古いPCからコピーされているよう

けれども、私は...、の.lnkの代替ストリームを見て

関連する問題