golang调用windows文件的默认打开方式

最近在写的一个程序,需要使用golang调用windows下的一个html页面。在windows下调用的方式有两种,一种是通过 cmd 程序调用,另一种是通过rundll32.exe程序进行调用。

方式1:

package main
import (
	"fmt"
	"log"
	"os/exec"
	"path/filepath"
	"strings"
)
func main() {
	/*cmd := exec.Command("cmd", "/k", "start", "11.html")
	//cmd.Dir = "c:\\"
	cmd.Dir = "c:\\"
	cmd.Start()*/
	dir, err := filepath.Abs(filepath.Dir("brow.go"))
	if err != nil {
		log.Fatal(err)
	}
	newdir := strings.Replace(dir, `\`, `\\`, -1)
	fmt.Println(dir)
	fmt.Println(newdir)
	cmd := exec.Command("cmd", "/k", "start", "11.html")
	//cmd := exec.Command("cmd", "/c", "start", "www.baidu.com")
	cmd.Dir = newdir
	cmd.Start()
}

cmd /k会扔旧会保留当前的cmd窗口,cmd /c调用结束后会自动关闭cmd窗口。

方式2:

package main
import (
	"fmt"
	"log"
	"os/exec"
	"runtime"
)
func openbrowser(url string) {
	var err error
	switch runtime.GOOS {
	case "linux":
		err = exec.Command("xdg-open", url).Start()
	case "windows":
		err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start()
	case "darwin":
		err = exec.Command("open", url).Start()
	default:
		err = fmt.Errorf("unsupported platform")
	}
	if err != nil {
		log.Fatal(err)
	}
}
func main() {
	openbrowser("www.baidu.com")
        openbrowser("c:\\11.html")
}

这上面只是以html 和URL为例,其实对于pdf或xlsx、ppt文件等也是适用的。这个在windows7 版本上测试是成功的,在windows 2012上测试不通过,不过没有找到原因。

参考页面:

关于利用rundll32执行程序的分析

golang:在Windows上运行pdf文件的默认应用程序

https://stackoverflow.com/questions/12073635/golang-run-default-application-for-a-pdf-file-on-windows

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注