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

参考页面: