最近在写的一个程序,需要使用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上测试不通过,不过没有找到原因。
参考页面: