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

2019年5月15日 发表评论 阅读评论

最近在写的一个程序,需要使用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




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.