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