I'd like to open a PDF file in the filesystem from go with the default application. How can I do that? From the command line I just write the filename of the pdf file and the application opens (with the requested file). When I try to use exec.Command()
I get an error (not surprisingly) exec: "foo.pdf": executable file not found in %PATH%
.
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)
}
}
You must launch cmd /C start foo.pdf
. This will let the start command find the correct executable for you.
cmd := exec.Command("cmd", "/C start path_to_foo.pdf")
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", "path_to_foo.pdf")
should also handle it.
Note that still the right way to do it is to use a C wrapper around the ShellExecute()
API function exported by shell32.dll
, and the "w32" library seems to provide this wrapper right away.