2012-08-22 4 views
6

デフォルトのアプリケーションを使用してファイルシステム内のPDFファイルを開きたいとします。どうやってやるの?コマンドラインから、私はちょうどpdfファイルのファイル名を書き、アプリケーションは(要求されたファイルと共に)開きます。 exec.Command()を使用しようとするとエラーが発生します(驚くことではありません)exec: "foo.pdf": executable file not found in %PATH%golang:Windows上のpdfファイルの既定のアプリケーションを実行する

package main 

import (
    "log" 
    "os/exec" 
) 

func main() { 
    cmd := exec.Command("foo.pdf") 
    err := cmd.Start() 
    if err != nil { 
     log.Fatal(err) 
    } 
    err = cmd.Wait() 
    if err != nil { 
     log.Fatal(err) 
    } 

} 

答えて

1

cmd /C start foo.pdfを起動する必要があります。これにより、startコマンドが正しい実行可能ファイルを見つけることができます。

cmd := exec.Command("cmd", "/C start path_to_foo.pdf") 
+0

ファイル名に空白が含まれていると、この方法は動作しません – Carl

+0

空白を含むファイル名を開くことができるはずです。 http://stackoverflow.com/a/13692919/395461を参照してください。ただし、コマンドラインで手動で入力した場合でも、Goで正しく動作するコマンドを取得できませんでした。 – Shannon

11
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", "path_to_foo.pdf") 

も、それを処理する必要があります。まだそれを行うための正しい方法はshell32.dllによってエクスポートShellExecute() API関数の周りにCラッパーを使用することであり、"w32" libraryはすぐにこのラッパーを提供しているようだ

注意。

+3

このメソッドは、ファイル名にスペースが含まれていても機能します – Carl

関連する問題