我想在默认应用程序中打开文件系统中的PDF文件。我怎样才能做到这一点?从命令行我只需编写pdf文件的文件名,然后打开应用程序(带有请求的文件)。当我尝试使用exec.Command()
时,我收到错误(不足为奇)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)
}
}
答案 0 :(得分:12)
exec.Command("rundll32.exe", "url.dll,FileProtocolHandler", "path_to_foo.pdf")
也应该处理它。
请注意,仍然正确的方法是使用shell32.dll
导出的ShellExecute()
API函数周围的C包装器,"w32" library似乎立即提供此包装器。
答案 1 :(得分:1)
您必须启动cmd /C start foo.pdf
。这将让start命令为您找到正确的可执行文件。
cmd := exec.Command("cmd", "/C start path_to_foo.pdf")
答案 2 :(得分:0)
创建一个这样的文件:
//go:generate mkwinsyscall -output zmain.go main.go
//sys shellExecute(hwnd int, oper string, file string, param string, dir string, show int) (err error) = shell32.ShellExecuteW
package main
const sw_shownormal = 1
func main() {
shellExecute(0, "", "file.pdf", "", "", sw_shownormal)
}
然后构建:
go mod init pdf
go generate
go mod tidy
go build